在远程线程注入中,由于编程和实际运行处于不同的内存空间,势必会出现API内存地址不一致的情况,导致某些包含绝对地址的指令无法正常运行。解决这个问题的办法是代码重定位方法,具体代码如下:
dwVar dd ?
call @F
@@:
pop ebx
sub ebx,offset @B
mov eax,[ebx,offset dwVar]
通过call/pop/sub三个指令组合,能计算出代码当前的位置和设计时位置的偏移值之差,只要使用这个差值去修正包含绝对地址的指令,如全局变量的指令,能保证修正后的地址是正确的,这就解决了重定位问题。