在WinDbg中显示共享内存部分的内容?

时间:2008-12-24 10:34:17

标签: windbg

我有几个使用命名内存部分进行通信的程序。有没有办法可以在用户模式或内核模式下从WinDBG查看此共享内存部分的内容?我没有指向它的指针,但我知道这个名字。

2 个答案:

答案 0 :(得分:2)

只是试图在我们的共享内存上执行此操作而没有得到您想要的内容,但我在这里为后人添加注释:

  • 我找不到从名称中获取句柄的简单方法,但是如果你执行“!handle 0 f”然后搜索输出,你可以看到内核对象的名称及其句柄ID:get从此处理。
  • 显然共享内存内核对象中没有特定于进程的地址,但是 .call / s KnownFuncWithSamePrototype MapViewOfFileEx确实返回看似有效指针的内容

你需要'.call'的完整符号才能工作,但你没有MapViewOfFile(Ex),我碰巧找到一个函数返回一个指针并在我们的代码中占用了六个参数,所以我没有必须重新编译才能使其工作(这就是KnownFuncWithSamePrototype的意思)。我不确定这是否适合您。

希望这有帮助!

答案 1 :(得分:0)

使用用户模式调试器...您是否可以编写一个非常简单的测试应用程序来获取对命名内存部分的访问权(即调用OpenFileMapping然后调用MapViewOfFile),然后在调试器下运行该应用程序?您应该能够通过调用来访问该部分,然后检查该应用程序对该部分的视图。

(如果有帮助,this MSDN page上的“Second Process”标题为进程访问命名的共享内存部分并将其映射到其地址空间提供示例代码。)

我通常喜欢编写小型测试工具来帮助调试这样的事情......如果你想让事情变得更简单,你甚至可以编写测试工具来自动分解到任何附加的调试器(使用函数)比如DebugBreak)。

相关问题