2

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

4

2 回答 2

2

只是试图在我们的共享内存上执行此操作而没有得到您想要的,但我在这里为后代做笔记:

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

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

希望这可以帮助!

于 2011-02-10T02:06:13.700 回答
0

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

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

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

于 2008-12-26T15:50:48.760 回答