我有幾個使用命名內存段進行通信的程序。有什麼方法可以在用戶模式或內核模式下查看WinDBG中共享內存部分的內容?我沒有一個指針,但我知道這個名字。在WinDbg中顯示共享內存部分的內容?
2
A
回答
0
使用用戶模式的調試器...你可能會寫一個非常簡單的測試應用程序,獲取對命名內存部分的訪問(即調用OpenFileMapping,然後調用MapViewOfFile),然後在調試器下運行該應用程序?您應該能夠跨過調用訪問該部分,然後檢查該應用對該部分的視圖。
(在情況下有幫助,「第二處理」上this MSDN page標題提供了示例代碼進程訪問名爲,共享存儲器部,並將其映射到其地址空間。)
我一般一個很編寫小型測試工具以幫助調試類似這樣的事情......如果想讓事情變得更簡單,甚至可以編寫測試工具來自動分解任何附加的調試器(使用諸如DebugBreak之類的函數)。
2
只是試圖做到這一點對我們的共享內存,也不一定是得到你想要的,但我在這裏把筆記給後人:
- 我無法找到一個簡單的方法來從獲取句柄名稱,但是如果你執行「!handle 0 f」然後搜索輸出,你可以看到你的內核對象的名稱和它們的句柄標識符:從這裏得到句柄。
- 明顯共享內存內核對象不具有特定的過程地址,但 .CALL/s的KnownFuncWithSamePrototype MapViewOfFileEx不會返回什麼看起來像一個有效的指針
您需要的」全符號。調用'的工作,但你沒有MapViewOfFile(Ex),我碰巧找到一個函數返回一個指針,並在我們的代碼中佔用了六個參數,所以我不必重新編譯來讓它工作(這是KnownFuncWithSamePrototype意味着什麼)。我不確定這是否是您的選擇。
希望這會有所幫助!
相關問題
- 1. C++共享庫顯示內部符號
- 2. 在Orchard中顯示內容部分
- 3. 拆分共享內存?
- 4. CUDA:共享內存分配
- 5. 在刪除共享內存之前從共享內存中分離
- 6. 內存共享
- 7. 共享內存在Unix的
- 8. OpenCL中的共享內存
- 9. DLL中的共享內存
- 10. 跨Docker容器的共享內存
- 11. 共享庫內部
- 12. 共享內存在哪裏分配?
- 13. boost :: interprocess不在共享內存中的容器容器
- 14. Liferay的7:共享內容
- 15. 分享後不顯示社交分享內容?
- 16. C共享內存
- 17. Linux共享內存
- 18. 共享內存段
- 19. CUDA共享內存
- 20. RDMA內存共享
- 21. 增加共享內存的內存
- 22. C++的分佈式共享內存庫?
- 23. 我們如何從共享內存中分配動態內存?
- 24. Bootstrap Modal Only顯示部分內容
- 25. CALayer並顯示部分內容
- 26. Google地圖只顯示部分內容
- 27. Sitecore - 共享內容在哪裏被使用/顯示?
- 28. 新增內容類型不顯示在共享點
- 29. 在內存中緩存數據共享
- 30. 共享內存中內部進程的屏障實現
你有沒有設法找出?使用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