【发布时间】:2010-05-24 01:33:07
【问题描述】:
我已经用谷歌搜索了,但我不确定我问的是不是正确的问题,无论如何我都找不到太多,也许链接会有所帮助。
我制作了一个显示消息框的 c++ 程序,然后我用 Ollydbg 打开它并转到它调用 MessageBoxW 的部分。
每次我运行应用程序时,MessageBoxW 的调用地址都会发生变化,因为 Windows 正在更新我的 Imports 表以具有 MessageBoxW 的正确地址。所以我的问题是如何在导入表中找到 MessageBoxW 的虚拟地址,以及如何在 ollydbg 中使用它?
基本上,我正在尝试在程序集中创建一个代码洞穴以再次调用 MessageBoxW。
通过使用十六进制编辑器搜索可执行文件并找到调用的位置,我非常接近,我想我找到了虚拟地址。但是当我在 olly 中调用该虚拟地址并将其保存到可执行文件时,下次我打开它时,该调用被一堆 DB xyz 替换(看起来像虚拟地址,但为什么 call 被删除了?
对不起,如果我的术语不正确,因为我是新手,所以我不太确定该叫什么。
【问题讨论】:
-
我不明白你的大部分问题......你想用代码洞穴实现什么? “找到呼叫的位置”是什么意思?或许 GetProcAddress 函数会对您有所帮助?
-
是的,对不起,就像我说的那样,我的术语很可能是错误的。 GetProcAddress 会很棒,除了它的地址不是像其他任何改变一样吗?我怎样才能找到它的地址?对于代码洞穴,我只想显示第二个消息框以用于学习目的。 “找到调用的位置”意味着我想我在十六进制编辑器中找到了
CALL MessageBoxW的字节,所以如果“调用”的操作码是一个字节并且调用的地址是 4 个字节,那么这 4 个字节必须是调用虚拟地址吧? -
(作为答案回复,因为文字不符合评论长度限制)
标签: function assembly virtual virtual-address-space