OllyDbg 2.01“汇编”命令中的未知模块

时间:2014-07-31 21:09:05

标签: assembly disassembly ollydbg

我反汇编了一个破解我,我想用WINAPI SetDlgItemText()取代一个空的空间,它带有三个参数。
我成功地添加了三个&#34; push&#34;但是当我尝试汇编call <JMP.&USER32.SetDlgItemTextA>时,OllyDbg用红色Unknown module说道我 上面几行使用了相同的指令(通过软件,我自己没有组装) 如何解决此错误并调用SetDlgItemText?二进制复制 - 二进制粘贴并不能解决问题(跳转到代码的不同部分,可能是因为我对操作码造成了一些麻烦)<登记/>

这是一个截图(full size): enter image description here

EDIT1:我在地址0x00401460找到了JMP功能。所以我用它替换了它,立即用ollydbg用call <JMP.&USER32.SetDlgItemTextA>字符串替换它。为什么不能这样做呢?

1 个答案:

答案 0 :(得分:0)

PE File Format中,通常使用导入地址表(IAT)来调用导入函数。此结构包含一个连续的地址指针列表,在加载二进制文件并解析导入时,Windows Loader将对其进行初始化。

在导入目录中,它们是关于导入的模块的信息,对于每个模块,函数名称和函数是否已导入。在加载过程中,此信息用于定位要导入的模块和函数,并使用导入函数的内存中的地址初始化IAT,该地址已加载到内存中(在常见的导入过程中)。

根据您已经拥有的问题,当您再次拨打SetDlgItemTextA时,您需要做的是搜索二进制文件。该指令应该类似于CALL [address](例如:CALL [0x401634])或JMP [address](例如:JMP [0x401434]),请注意是调用该地址中的地址,而不是调用到那个地址,是一个doble间接(很可能是OllyDB解析函数的名称并用名称替换这个地址),在这种情况下你可以读取指令的二进制表示的地址。您的调用将是相同的,指令的操作码可能必须是0xFF (Indirect CALL or JMP)

CALL or JMP中的地址是Loader将使用导入函数的实际内存地址设置的导入函数的指针的地址。