使用sos,我可以获得特定类的方法表条目列表:
!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
的表条目 - 在内存中的方法表周围戳一下只给出Entry值,它指向JIT存根。我无法弄清楚如何从那里获得MethodDesc
s。有人有什么想法吗?
答案 0 :(得分:0)
您可以从Class1.B..ctor()
的条目中获取MethodDesc!dumpmd poi(001dc098-0x4)
例如,这是一个示例dumpmt
0:021> !dumpmt -md poi(0x18e3d90)
EEClass: 012ef6a4
Module: 00d42c5c
Name: LINQPad.UserOptions
mdToken: 02000002 (C:\Documents and Settings\naveen\My Documents\Downloads\LINQPad.exe)
BaseSize: 0x3c
ComponentSize: 0x0
Number of IFaces in IFaceMap: 0
Slots in VTable: 16
--------------------------------------
MethodDesc Table
Entry MethodDesc JIT Name
03aa6aa0 03924924 PreJIT System.Object.ToString()
03aa6ac0 0392492c PreJIT System.Object.Equals(System.Object)
03aa6b30 0392495c PreJIT System.Object.GetHashCode()
03b17410 03924980 PreJIT System.Object.Finalize()
01321618 00d481ac JIT LINQPad.UserOptions..ctor()
01321458 00d481c0 JIT LINQPad.UserOptions..cctor()
013214a8 00d48140 JIT LINQPad.UserOptions.get_Instance()
01321580 00d4814c JIT LINQPad.UserOptions.Load()
01321650 00d48158 JIT LINQPad.UserOptions.Deserialize(System.String)
00d4c249 00d48164 NONE LINQPad.UserOptions.Save()
018c8410 00d48170 JIT LINQPad.UserOptions.get_TabSizeActual()
00d4c251 00d4817c NONE LINQPad.UserOptions.get_IsVBDefault()
01325ef0 00d48188 JIT LINQPad.UserOptions.GetDefaultCustomSnippetsFolder()
01325e00 00d48194 JIT LINQPad.UserOptions.GetCustomSnippetsFolder(Boolean)
0db83d50 00d481a0 JIT LINQPad.UserOptions.get_ActualEditorBackColor()
01321898 00d481b4 JIT LINQPad.UserOptions.<Deserialize>b__0(System.Reflection.FieldInfo)
这里是使用!dumpmd
从条目引用回来的methoddes0:021> !dumpmd poi(01321458-0x4)
Method Name: LINQPad.UserOptions..cctor()
Class: 012ef6a4
MethodTable: 00d4838c
mdToken: 0600000c
Module: 00d42c5c
IsJitted: yes
CodeAddr: 01321458
HTH