2010-05-14 59 views
1

考虑下面的x86汇编指令:获取操作数从指令

mov  esi, offset off_A 
cmp  esi, offset off_B 

我怎么会在运行时得到的偏移量(第二个操作数)?这是情景:一个程序(注入在运行时的过程)替换了一些自己的偏移量,导致:

mov  esi, offset off_X 
cmp  esi, offset off_Y 

这个程序允许插件编写并加载通过它,但不公开替换地址。因此,考虑到上述说明存在的地址,我如何找到偏移量X和Y?

回答

1

我不太明白这是对的,但是...

mov esi, ...编码为BE其次是双字操作数。如果你有mov指令的地址你根本就跳到一个字节,看看地址操作数,off_A

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

0

我不确定你在问什么。偏移量的地址。因此,第一行代码将off_9F6FBC的地址移动到esi。

如果你的意思是如何得到绝对地址(结合PIC等),那么在反汇编时就无法知道这个地址。它只是在运行时已知的,可以改变每运行

+0

不明确的道歉。我已经编辑了该问题以包含有关使用场景的详细信息。希望现在更清楚。 – shadeMe 2010-05-14 02:44:50

0

有很多方法可以对MOV esi进行编码,立即。取决于你的汇编器和编译器,它们中的任何一个都可能被使用。

如果不使用汇编器助记符,如十六进制。你可以在这里找到补偿点:

db 0xBE; off_X: dd normal_offset