1

给定以下 x86 汇编指令:

mov     esi, offset off_A
cmp     esi, offset off_B

我如何在运行时获得偏移量(第二个操作数)?这是场景:一个程序(在运行时注入到进程中)用它自己的一些偏移量替换偏移量,导致:

mov     esi, offset off_X
cmp     esi, offset off_Y

该程序允许通过它编写和加载插件,但不公开替换地址。那么,鉴于上述指令存在的地址,我如何找到偏移量 X 和 Y ?

4

3 回答 3

1

我不太明白这是为了什么,但是...

mov esi, ...被编码为BE后跟 dword 操作数。如果您有mov指令的地址,您可以简单地向前跳过一个字节并查看地址操作数,off_A

cmp esi, ...被编码为81 FE后跟一个双字操作数,所以在这里你可以跳过两个字节来查看操作数。

于 2010-05-16T19:11:48.653 回答
0

我不确定你在问什么。偏移量地址。所以第一行代码是将地址移动off_9F6FBC到esi。

如果您的意思是如何获取绝对地址(结合 PIC 等),那么这在反汇编时是不知道的。它仅在运行时已知,并且可以更改每次运行

于 2010-05-14T02:29:23.390 回答
0

MOV esi,立即编码有很多方法。根据您的汇编器和编译器,可能会使用它们中的任何一个。

如果您在不使用汇编程序助记符的情况下执行此操作,例如十六进制。您可以确定那里的偏移量:

db 0xBE; off_X: dd normal_offset
于 2010-05-18T18:24:50.050 回答