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个字节的位置吗?
对象的CLR内部结构是:
[DWORD:SyncBlock] [DWORD:MethodTable指针] [DWORD:引用类型指针] ... [值类型字段的值] ...
对象标题: [DWORD:SyncBlock]
对象指针: [DWORD:MethodTable指针] [DWORD:引用类型指针] ... [值类型字段的值] ...每个对象前面都有一个ObjHeader(负偏移).ObjHeader具有SyncBlock的索引.
| 归档时间: |
|
| 查看次数: |
1501 次 |
| 最近记录: |