gpt4 book ai didi

c++ - 如何创建另一个进程内存的二进制/十六进制转储?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:37:16 28 4
gpt4 key购买 nike

我找不到将另一个进程的内存转储到文件的合理方法。

经过大量搜索,我在 CodeProject 上找到了一篇不错的文章,它具有我想要的*大部分*功能: Performing a hex dump of another process's memory.这很好地解决了权限问题并奠定了良好的基础。

但是,使用此实用程序,我发现即使是一个小进程,如干净的 Notepad.exe 或 Calc.exe 实例,也可以生成大小超过 24MB 的转储文件,而进程本身在内存中运行不到 20KB根据 TaskManager。

这篇文章让我相信,也许它也在共享内存中转储东西,可能是 DLL 空间等。例如,Calc.exe 的转储将包括包含来自 Kernel32.dll 的方法名称(可能还有内存)的部分:

²³´µKERNEL32.dll ActivateActCtx AddAtomA AddAtomW AddConsoleAliasA AddConsoleAliasW AddLocalAlternateComputerNameA AddLocalAlternateComputerNameW AddRefActCtx AddVectoredExceptionHandler AllocConsole AllocateUserPhysicalPages AreFileApisANSI AssignProcessToJobObject AttachConsole BackupRead BackupSeek BackupWrite BaseCheckAppcompatCache BaseCleanupAppcompatCache

是否有更好的方法来转储不会导致此开销的另一个进程的内存,或者可能是对解决此问题的链接文章代码的改进?我想获得实际上属于进程本身的内存。我可以转储实际在 DLL 中使用的函数的内存空间,但似乎没有必要转储多个 DLL 的*全部*内容以获取进程的运行内存。

我正在寻找一种方法来获取 30KB 进程的 30-60KB,而不是 30KB 进程的 25MB。或者至少比我目前能得到的更近。

在此先感谢您的建议和指导,不胜感激。

注意:这是针对控制台实用程序的,因此 CodeProject 文章中的 GUI 元素并不重要。

最佳答案

您基本上是在请求用户进程小型转储。 Windows 调试帮助程序库有一个现成的函数,MiniDumpWriteDump .

MINIDUMP_TYPE 的小型转储中包含的详细信息量进行粗略控制。传递给函数的参数。最基本的,MiniDumpNormal,只会捕获进程中每个线程的调用堆栈。对于其他小型转储类型,内存量会逐渐变得更加详细。

您还可以通过向 MiniDumpWriteDump 函数提供回调来精细控制要写入小型转储的信息量,并在回调中设置 MINIDUMP_CALLBACK_OUTPUT 上的标志> 结构。

生成的小型转储可以是 read使用 Windbg 或 Visual Studio 等调试器,或者它们可以由 various functions in the dbghelp.dll 处理图书馆。

关于c++ - 如何创建另一个进程内存的二进制/十六进制转储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1296947/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com