EIP = 0x0040101E,读取Opcode 8D 对应指令为
LEA Gv,M
Gv描述的是32位寄存器,M的描述:
更进一步的操作数描述需要结合ModR/M,CPU在读取操作码8D需要往后读取1byte内容,读取后的ModR/M = 75 = 01 110 101 读取出来的Gv = ESI,因此指令解析为:LEA ESI,MOD解析当前指令的指令码为:8D 75 E4。第二个操作数由M描述,并且对第二个操作数的描述需要借助往后的1字节内容(E4)但具体应该是什么呢?
LEA ESI,M
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
8d代表lea75代表esi,[ebp+disp8]e4代表disp8
はつゆき 8d代表lea75代表esi,[ebp+disp8]e4代表disp8
首先感谢回答,我也尝试照着ModR/M的查询结果进行第二个操作数的解读,但结果是错误的。对于第二个操作数,我的解读思路:读取指令执行的EBP的值再加上往后读取处的1字节内容(E4),但结果和我在OD看到的指令运行后ESI的值不一致。
はつゆき e4是机器码,没有符号这个概念,disp8有符号,所以+变-
blindtiger 0xE4最高位是1,为负数,0xE4 = -(not(0xE4) + 1)=-0x1c.