我需要一些有关 Ollydbg 汇编调用的帮助。我正在搞一个简单的应用程序。到目前为止,太好了,我为自己创建了一个 codecave 来添加一些代码。
但是,每当我尝试创建对调试的可执行模块之外的函数的调用时,例如 a kernel32
ormsvcrt
函数,它都会把一切搞砸。
让我们看看应用程序中的一些随机调用:
0041D654 FF15 DC714200 CALL DWORD PTR DS:[<&KERNEL32.GetCommandLineA>]
当我双击它时,它向我显示CALL DWORD PTR DS:[4271DC]
所以,4271DC
似乎指向76FB496D
,这确实是:
76FB496D >-FF25 60070177 JMP DWORD PTR DS:[<&api-ms-win-core-processenvironment-l1-2-0.Get> ;KERNELBA.GetCommandLineA
好吧,我只是从应用程序本身中窃取了它。现在我想给kernel32
自己打电话。我组装一条线并输入CALL DWORD PTR DS:[Kernel32.GetCommandLineA]
现在它说:
0041D654 FF15 6D49FB76 CALL DWORD PTR DS:[KERNEL32.GetCommandLineA]
看起来不错!
组装线CALL DWORD PTR DS:[76FB496D]
。运行它当然很好,但是每当我在另一台电脑上像这样运行它时,一切都会崩溃。
我的问题是:如何制作这样的指针CALL DWORD PTR DS:[4271DC]
,以便代码在所有电脑上运行?
我当然可以CALL DWORD PTR DS:[4271DC]
在应用程序中随时使用来调用该函数getcomandlineA
,但我不知道(动态?)指针,比方说,kernel32.lstrcpy
。