- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我找不到将另一个进程的内存转储到文件的合理方法。
经过大量搜索,我在 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/
我正在为我的应用程序使用 Tank-Auth。我唯一的问题是激活和重置帐户密码。 用于登录、注册、注销;我对这些代码没有问题; $route['login'] = "/auth/login"; $ro
我是一名优秀的程序员,十分优秀!