【问题标题】:How to access the PEB (process environment block) in dump using DbgHelp如何使用 DbgHelp 访问转储中的 PEB(进程环境块)
【发布时间】:2013-02-28 17:19:13
【问题描述】:

我发现了一个example,它使用调试器引擎 API 来获取转储中的 PEB。这可以使用 DbgHelp 吗?拥有使用 DbgHelp 提取注释和异常信息的现有代码。如果可能,想从 PEB 获取一些信息。

【问题讨论】:

  • 相当确定的方法是使用 Memory64List 和 MemoryInfoList 流来获取存储 PEB 的内存,但不知道如何去做。
  • This CodeProject 可能对您有所帮助。我还应该提到,PEB 中的大部分信息都可以通过其他可能更安全的方式获得。
  • 谢谢。那篇文章是关于从正在运行的进程中获取 PEB。我有兴趣从转储文件中获取它。

标签: debugging minidump dbghelp


【解决方案1】:

您可以使用MiniDumpReadDumpStream 函数从转储文件中读取流。只需将转储文件读入内存或映射到内存中,即可使用此功能。

访问 PEB。从转储文件中读取 ThreadListStream。 MINIDUMP_THREAD_LIST 结构将包含一个 MINIDUMP_THREAD 结构数组,其中有一个 Teb 字段,其中包含该线程的 TEB 地址。

32 位和 64 位上的 TEB 和 PEB 的区别在于,64 位上的指针是 8 个字节。

这意味着对于 32 位进程,PEB 的地址可以在 TEB 的 0x30 偏移处找到。对于 64 位进程,PEB 的地址可以在 TEB 的 0x60 偏移处找到。

从小型转储文件读取内存时,您需要滚动自己的内存读取器函数。

【讨论】:

    【解决方案2】:

    WinDbg 中有一个 !peb 命令,它适用于转储。也可以在这里查看:http://windbg.info/doc/1-common-cmds.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-03
      • 2021-10-04
      • 2014-08-24
      • 1970-01-01
      • 2012-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多