代码之家  ›  专栏  ›  技术社区  ›  noctonura

如何在windbg中行走本地对象?

  •  0
  • noctonura  · 技术社区  · 15 年前

    我正在调查应用程序中占用大量内存的内容。使用!dumpobj命令,我可以绕过托管对象。但是如何对本机对象进行等效呢?例如,这个.NET对象有一个指向本机代码的指针。我被困在这里…我该怎么做呢?从这里扔东西?我有所有的来源和符号。

    0:006> !DumpObj 0000000006222a50 
    Name: Beriliun.GS.Internal.Signer
    MethodTable: 000007ff00658548
    EEClass: 000007ff00734170
    Size: 24(0x18) bytes
     (d:\GS\bin\debug\LIBXT.dll)
    Fields:
                  MT    Field   Offset                 Type VT     Attr            Value Name
    000007fef02f8448  4000647        8                  PTR  0 instance 000000002d7621e0 pSigner
    0:006> !DumpObj 000000002d7621e0 
    <Note: this object has an invalid CLASS field>
    Invalid object
    
    3 回复  |  直到 15 年前
        1
  •  1
  •   steve    15 年前

    可以通过运行以下命令来转储对象:

    !object address.
    

    此外,还可以转储对象头。对象头总是位于内存中对象之前的18h字节处。它可以通过以下命令进行转储

    !dt nt!_object_header address-18h
    

    为了找出除了转储对象类型之外可能还需要的类型。这可以通过以下命令实现。

    !dt nt!_object_type address-of-type
    

    类型的地址作为对象头转储的一部分打印。相应的字段名为类型。

        2
  •  2
  •   Naveen    15 年前

    d*命令应该提供内存的内容 d

        3
  •  2
  •   Dima Stopel    15 年前

    DT模块!TyPulf ADDR

    例如,dt mymodule!MyClass 0x12345678

    推荐文章