【发布时间】:2012-02-01 22:17:39
【问题描述】:
假设我有应用程序 TestApp.exe 在 TestApp.exe 运行时,我希望有一个单独的程序能够读取驻留在内存中的可执行代码。我想忽略堆栈和堆以及其他任何相切的东西。
换一种说法,我想我在问如何确定磁盘上 .exe 二进制数据的内存端等效项所在的位置。我意识到这不是 1:1 的内存填充。
编辑:我认为我要求的内容在以下 vmmap.exe 屏幕截图中显示为 Image
编辑:我可以使用 VirtualQueryEx 和 ReadProcessMemory 从内存中获取所有带有 Execute*(PAGE_EXECUTE 等)保护标志的内存。有几个问题。首先,我为 notepad.exe 获取大约 2 兆字节的数据,这是磁盘上的 189 KB 文件。我抓取的所有东西都有一个 PAGE_EXECUTE 的保护标志。其次,如果我在不同的 Win7 64 位机器上运行它,我会得到相同的数据,只是分成两半并且顺序不同。我可以使用一些专家指导。 :)
编辑:另外,不知道为什么我在这个问题上是-1。如果我需要澄清任何事情,请告诉我。
【问题讨论】:
-
当您将代码保存在文件中时,从内存中读取代码到底有什么意义?
-
一个正当的理由是制作一个类似于屏幕截图中的应用程序?不过,为什么重要呢?
-
您展示的应用不会尝试读取可执行代码。
-
我展示的应用程序不是我打算写的。无论如何,你能提供帮助吗?
-
答案隐藏在this question中。但是你在做什么很奇怪。为什么你需要像那样弄乱另一个进程的内存空间?这样做的程序可能会触发恶意软件检测器。
标签: windows winapi memory process