1

sos を使用して、特定のクラスのメソッド テーブル エントリ リストを取得できます。

!DumpMT -MD 1d3c58
mscorwks.dll の PDB シンボルが読み込まれていない
EEClass: 001d195c
モジュール: 001d2f2c
名前: Class1.B
mdトークン: 02000005
ベースサイズ: 0xc
コンポーネントサイズ: 0x0
IFaceMap の Iface の数: 0
VTable のスロット: 7
--------------------------------------
MethodDesc テーブル
   Entry MethodDesc JIT 名
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 なし Class1.BM()
001dc090 001d3c40 なし Class1.BN()
001dc098 001d3c4c JIT Class1.B..ctor()

しかし、sos がテーブル エントリを a と一致させる方法がわかりませんMethodDesc。メモリ内のメソッド テーブルを突いても、JIT スタブを指すエントリ値しか得られません。そこから sを取得する方法がわかりませんMethodDesc。誰にもアイデアはありますか?

4

1 に答える 1

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 を使用したエントリから methoddesc への参照です

0:021> !dumpmd poi(01321458-0x4)
Method Name: LINQPad.UserOptions..cctor()
Class: 012ef6a4
MethodTable: 00d4838c
mdToken: 0600000c
Module: 00d42c5c
IsJitted: yes
CodeAddr: 01321458

HTH

于 2010-07-07T18:33:56.403 に答える