1

我正在编写 dbgeng 客户端并尝试为时间旅行调试会话枚举可用的虚拟内存。

Dbgeng API 有IDebugDataSpaces2::QueryVirtual方法,它适用于实时用户模式调试会话,但不适用于 TTD 跟踪会话重放。当我尝试调用它时,我收到 0x8000ffff (E_UNEXPECTED) 错误。

看起来!address!vprot来自windbg preview gui的命令有同样的问题

0:000> !vprot 0
ERROR: !vprot: extension exception 0x8000ffff.
    "QueryVirtual failed"
0:000> !address

        BaseAddress      EndAddress+1        RegionSize     Type       State                 Protect             Usage
--------------------------------------------------------------------------------------------------------------------------

IDebugDataSpaces4::GetValidRegionVirtual方法。它可以工作,但太长了(看起来它试图手动检查每一页)。看起来IDebugDataSpaces4::GetNextDifferentlyValidOffsetVirtual对于 TTD 重放也有问题。

dbgeng API 是否有其他方法来枚举进程的有效内存范围?或者也许还有另一种方法可以从 IDX 或 RUN 文件中获取此信息?

4

1 回答 1

0

目前,实时调试和转储文件中的某些信息在 TTD 中不可用。两个主要功能是: a) QueryVirtual 不起作用;b) 不保存进程和线程安全令牌信息。我在我的 Debug 扩展中经常使用 QueryVirtual,并进行了更改来处理它。很抱歉成为坏消息的承担者。

于 2021-05-20T20:32:10.527 回答