+ -
当前位置:首页 → 问答吧 → 求助这个call指令怎么写!!

求助这个call指令怎么写!!

时间:2011-04-19

来源:互联网

我想修改一个dll,在dll入口处跳转到另一个地方,再那个地方,会执行LoadLibrary("xxx.dll")语句,然后再跳回来继续执行!
  现在我的想法是在程序入口处改为jmp xxxx(xxxx为LoadLibrary("xxx.dll")的地址),在LoadLibrary("xxx.dll")后面不上jmp xxxx替换的代码,然后再跳转回去!
  问题是在LoadLibrary("xxx.dll")中,我写法是
Assembly code

push xxxxx;xxxxx地址保存着xxx.dll
call LoadLibrary

现在我搞不懂这个call LoadLibrary怎么写!!我看到我电脑上vc代码你出来是
Assembly code

call        dword ptr [__imp__LoadLibraryA@4 (0042a148)]


我觉得如果写成
Assembly code

call 0042a148


这样是不对的,这样只能在我电脑上运行,那么应该怎么写呢??求助大家一下,非常感谢哈

作者: StriveScript   发布时间: 2011-04-19

这些都是在这个待修改的 dll 里?如果是的话,call LoadLibrary 可以写成 jmp ???????? ,其中 ???????? 是 call dword ptr [__imp__LoadLibraryA@4 (0042a148)] 这个指令的地址。这是因为 0042a148 这个 dword 存放的是 LoadLibrary() 函数的入口地址,但这个 0042a148 是可能变化的;所以,不能直接使用它。但对于一个模块里的上面的两个指令而言,它们的间隔是固定的,所以可以通过 jmp 指令调整到这个 call 指令来来进行 LoadLibrary() 函数的调用。

作者: zara   发布时间: 2011-04-19

没看懂你的意思。郁闷。。。
不过你要执行call LoadLibrary的话 可以先通过GetProcAddress拿到他的地址啊

作者: gangyilovevc   发布时间: 2011-04-19

一楼正解,还可以直接查找到dll里导出表中LoadLibrary()函数的地址,直接call(jmp)就可以了,或者利用Detours库hook住dll的入口点也可以

作者: aiwnx   发布时间: 2011-04-19