给出以下x86汇编指令:
mov esi, offset off_A
cmp esi, offset off_B
如何在运行时获得偏移量(第二个操作数)?这是一个场景:一个程序(在运行时注入到进程中)用一些自己的偏移替换了偏移量,结果是:
mov esi, offset off_X
cmp esi, offset off_Y
此程序允许通过它编写和加载插件,但不会公开替换地址。因此,考虑到存在上述指令的地址,如何找到偏移量X和Y?
答案 0 :(得分:1)
我不太明白这是为了什么,但是......
mov esi, ...
编码为BE
,后跟dword操作数。如果你有mov
指令的地址,你可以简单地跳过一个字节并看到地址操作数,off_A
cmp esi, ...
编码为81 FE
后跟一个双字操作数,所以在这里你可以跳过两个字节来查看操作数。
答案 1 :(得分:0)
我不确定你在问什么。偏移是地址。因此第一行代码将off_9F6FBC
的地址移动到esi。
如果您的意思是如何获得绝对地址(与PIC等结合使用),则在拆卸时无法知道。它只在运行时才知道,可以改变每次运行
答案 2 :(得分:0)
有许多方法可以编码MOV esi,即时。根据您的汇编程序和编译器,可能会使用它们中的任何一个。
如果在不使用汇编程序助记符的情况下执行此操作,则以十六进制表示。你可以找出那里的偏移量:
db 0xBE; off_X: dd normal_offset