我有一個.net應用程序正在做COM互操作並調用一些本地庫API。其中一個API會返回一些意想不到的數據,並給我帶來麻煩。我正在尋找一些方法來強制託管API的返回值。這不會解決我的問題,但幫助我縮小一些事情。我簡化了以下的事情。更改函數返回值
記住所有這些,讓我們說我的託管類名稱MyClass,它有兩個方法ParentMethod()和ChildMethod()。 ParentMethod調用內部調用這些本機API的ChildMethod。 ChildMethod本身返回一個布爾值。
闖入通過WinDBG的我的應用程序後,我第一次跑dumpheap型MyClass的命令,它給了我下面的輸出
0:!027> dumpheap型MyClass的
地址MT面積
0ac7e7e4 04ac5030 100
總0對象
統計:
MT計數總計TOTALSIZE類名稱
04ac5030 1 100 MyNamespace.MyClass
共1個對象
然後我運行下面的命令試圖獲取該類中方法的地址。
0:027> dumpmt -md 04ac5030
EEClass:04ac1b20
模塊:04ac49c8
名稱:MyNamespace.MyClass
mdToken:02000002
文件:MyAssemblyName,版本= 1.0.0.0,文化=中性公鑰=空
BaseSize:0x64
ComponentSize:爲0x0
插槽中的VTable:61
在IFaceMa IFaces數號碼:4
方法描述表
條目方法描述JIT名稱
04b20270 04ac4fd0 JIT MyNamespace.MyClass..ctor()
04b20230 04ac4ffc JIT MyNamespace.MyClass..cctor()
04acc081 04ac4fd8 NONE MyNamespace.MyClass.ParentMethod( )
04acc085 04ac4fe4 NONE MyNamespace.MyClass.ChildMethod()
04b202c0 04ac4ff0 JIT MyNamespace.MyClass.InitializeComponent()
我發現Naveen's blog entry他去寫了一些沿同一條線做某事的技巧,但我無法弄清楚我應該從這裏採取什麼確切步驟。任何幫助將不勝感激。
再次感謝納文。所以只是爲了理解@esp與poi的重要性。我的理解是,poi就像去參照一個地址一樣。 – 2011-04-17 23:18:56
@esp寄存器存儲函數返回地址。所以通過發佈bp poi(@esp),我們在返回地址上設置了一個斷點。 – Naveen 2011-04-18 01:06:23