1
使用SOS,我可以得到方法表條目列表特定類:如何使用MethodDesc匹配CLR方法表項?
!DumpMT -MD 1d3c58 PDB symbol for mscorwks.dll not loaded EEClass: 001d195c Module: 001d2f2c Name: Class1.B mdToken: 02000005 BaseSize: 0xc ComponentSize: 0x0 Number of IFaces in IFaceMap: 0 Slots in VTable: 7 -------------------------------------- MethodDesc Table Entry MethodDesc JIT Name 691f6a90 69071248 PreJIT System.Object.ToString() 691f6ab0 69071250 PreJIT System.Object.Equals(System.Object) 691f6b20 69071280 PreJIT System.Object.GetHashCode() 692674c0 690712a4 PreJIT System.Object.Finalize() 001dc088 001d3c34 NONE Class1.B.M() 001dc090 001d3c40 NONE Class1.B.N() 001dc098 001d3c4c JIT Class1.B..ctor()
但我無法弄清楚如何SOS可以匹配了一個MethodDesc
一個表項 - 具有以方法一捅內存中的表只給出指向JIT存根的Entry值。我無法弄清楚如何從那裏獲得MethodDesc
。有人有主意嗎?
我想在它自己的進程空間內使用不安全的代碼,而不是在調試會話中使用sos – thecoop 2010-07-08 09:09:27
您是否計劃託管CLR?我不明白「不安全的代碼和自己的進程空間」。 CLR可以在調試器內反彙編。 – Naveen 2010-07-08 11:36:10
我的另一個動機是獲得一個類型來處理不安全的代碼自己的vtable。在類型方法表中存儲的是JIT存根的地址,我需要將它們連接到方法的地址(通過方法委託的方法指針獲得)指向的地址,所以我可以更改它到別的東西。我知道這是非常邪惡的,但嘿:) – thecoop 2010-07-08 15:39:05