2008-12-24 54 views
2

我有幾個使用命名內存段進行通信的程序。有什麼方法可以在用戶模式或內核模式下查看WinDBG中共享內存部分的內容?我沒有一個指針,但我知道這個名字。在WinDbg中顯示共享內存部分的內容?

+0

你有沒有設法找出?使用Sysinternals的Process Explorer和使用LiveKD獲取命名部分的地址是非常容易的我可以檢查FILE_OBJECT,但我堅持如何進入* contents *本身。在[this]之後(http://www.osronline.com/article.cfm?article=280)將我帶到包含_EX_FAST_REF作爲FilePointer的CONTROL_AREA。 – 2017-10-13 05:56:28

回答

0

使用用戶模式的調試器...你可能會寫一個非常簡單的測試應用程序,獲取對命名內存部分的訪問(即調用OpenFileMapping,然後調用MapViewOfFile),然後在調試器下運行該應用程序?您應該能夠跨過調用訪問該部分,然後檢查該應用對該部分的視圖。

(在情況下有幫助,「第二處理」上this MSDN page標題提供了示例代碼進程訪問名爲,共享存儲器部,並將其映射到其地址空間。)

我一般一個很編寫小型測試工具以幫助調試類似這樣的事情......如果想讓事情變得更簡單,甚至可以編寫測試工具來自動分解任何附加的調試器(使用諸如DebugBreak之類的函數)。

2

只是試圖做到這一點對我們的共享內存,也不一定是得到你想要的,但我在這裏把筆記給後人:

  • 我無法找到一個簡單的方法來從獲取句柄名稱,但是如果你執行「!handle 0 f」然後搜索輸出,你可以看到你的內核對象的名稱和它們的句柄標識符:從這裏得到句柄。
  • 明顯共享內存內核對象不具有特定的過程地址,但 .CALL/s的KnownFuncWithSamePrototype MapViewOfFileEx不會返回什麼看起來像一個有效的指針

您需要的」全符號。調用'的工作,但你沒有MapViewOfFile(Ex),我碰巧找到一個函數返回一個指針,並在我們的代碼中佔用了六個參數,所以我不必重新編譯來讓它工作(這是KnownFuncWithSamePrototype意味着什麼)。我不確定這是否是您的選擇。

希望這會有所幫助!