日期:2014-05-17  浏览次数:20887 次

jmp 远跳转绝对地址是怎么计算的?
010BCDF3 6A 00 push 0  
010BCDF5 6A 00 push 0  
010BCDF7 6A 00 push 0  
010BCDF9 6A 00 push 0  
010BCDFB 68 03 CE 0B 01 push offset label_1 (10BCE03h) 
010BCE00 FF 65 EC jmp dword ptr [hProc] 
label_1:


//如上代码 hProc为MessageBoxA的地址..请问
010BCE00 FF 65 EC jmp dword ptr [hProc]
单步执行后如下:
76C4EA71 8B FF mov edi,edi 
76C4EA73 55 push ebp  

问: 绝对跳转地址新EIP(76C4EA71)是怎么由旧EIP(010BCE00 FF 65 EC)计算出来的?
就是绝对地址的计算方法(别讲些相对地址的计算方法,这个我懂)。哪位大牛给指点下,谢谢。

------解决方案--------------------
FF 65 EC jmp dword ptr [hProc] 指令,hProc 是个局部变量,此前就已经计算好了目标地址存放到这个变量里了;这个 jmp 指令只是直接拿这个目标地址来进行转移而已。具体怎么计算的,要看更前面的对 hProc 变量的赋值来源。