使用反汇编程序的.NET中的对象布局结构

pas*_*ena 4 .net c# clr disassembly

我有兴趣看到对象布局结构,并试图在visual studio中使用反汇编.以下是我的代码:

class myclass
{
  public int m_a;
}

myclass myc = new myclass();
myc.m_a = 23;
//I am setting a breakpoint after this line
Run Code Online (Sandbox Code Playgroud)

我打开了Memory1窗口,在地址字段中输入myc.我在输出窗口中获得以下详细信息(使用Windows XP PC 32位和英特尔编译器):

    0x0148B7BC  1c 93 a7 00 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Run Code Online (Sandbox Code Playgroud)

似乎在对象数据前面添加了一个额外的指针00a7931c,它将对象大小增加了4个字节.我的困惑是文档说由于每个对象的标题,对象大小增加了8个字节.有人可以指点我其他4个字节的位置吗?

dtb*_*dtb 8

高级.Net调试 - CLR对象的内部结构:

对象的CLR内部结构是:

[DWORD:SyncBlock] [DWORD:MethodTable指针] [DWORD:引用类型指针] ... [值类型字段的值] ...

对象标题: [DWORD:SyncBlock]
对象指针: [DWORD:MethodTable指针] [DWORD:引用类型指针] ... [值类型字段的值] ...

每个对象前面都有一个ObjHeader(负偏移).ObjHeader具有SyncBlock的索引.

  • 链接已死,域不再存在.据谷歌称,该文章已不再存在于互联网上.您是否碰巧知道其他网站,或者拥有该文章的本地副本? (5认同)