![.NET对PE结构的扩展_休闲](http://www.sinoit.org.cn/NewsLetter/NO.2/images/20080202-1_clip_image002.gif)
// COM+ 2.0 header structure.
typedef struct IMAGE_COR20_HEADER
{
DWORD cb;
WORD MajorRuntimeVersion;
WORD MinorRuntimeVersion;
IMAGE_DATA_DIRECTORY MetaData;
DWORD Flags;
union {
DWORD EntryPointToken;
DWORD EntryPointRVA;
};
IMAGE_DATA_DIRECTORY Resources;
IMAGE_DATA_DIRECTORY StrongNameSignature;
IMAGE_DATA_DIRECTORY CodeManagerTable;
IMAGE_DATA_DIRECTORY VTableFixups;
IMAGE_DATA_DIRECTORY ExportAddressTableJumps;
IMAGE_DATA_DIRECTORY ManagedNativeHeader;
} IMAGE_COR20_HEADER, *PIMAGE_COR20_HEADER;
偏移 |
大小 |
名 称 |
说 明 |
0 |
4 |
Cb |
CLR头的大小,以byte为单位 |
4 |
2 |
MajorRuntimeVersion |
能运行该程序的最小.NET版本的主版本号 |
6 |
2 |
MinorRuntimeVersion |
能运行该程序的.NET版本的副版本号 |
8 |
8 |
MetaData |
元数据的RVA和Size |
16 |
4 |
Flags |
属性字段,可以在IL中以.corflags进行显式设置,也可以在编译时用/FLAGS选项进行设置,其中命令行设置的优先级较高 |
20 |
4 |
EntryPointToken /EntryPointRVA |
入口方法的元数据ID(也就是token),在EXE文件必须有,而DLL文件中此项可以为0(.NET 2.0中,此项还可以是本地入口代码的RVA值) |
24 |
8 |
Resources |
托管资源的RVA和Size |
32 |
8 |
StrongNameSignature |
强名称数据的RVA和Size(强名称的意义在后面介绍) |
40 |
8 |
CodeManagerTable |
CodeManagerTable的RVA与Size,此项暂未使用,为0 |
48 |
8 |
VTableFixups |
v-table项的RVA和Size,主要供使用v-table的C++语言进行重定位 |
56 |
8 |
ExportAddressTableJumps |
用于C++的输出跳转地址表的RVA和Size,大多数情况为0 |
64 |
8 |
ManagedNativeHeader |
仅在由ngen生成本地模块中该项不为0,其余情况均为0 |
COMIMAGE_FLAGS_32BITREQUIRED =0x00000002,//此程序仅在32位系统上运行
COMIMAGE_FLAGS_IL_LIBRARY =0x00000004,//此程序仅作为IL代码库(很少用)
COMIMAGE_FLAGS_STRONGNAMESIGNED =0x00000008,//此程序有强名称(重要)
COMIMAGE_FLAGS_NATIVE_ENTRYPOINT =0x00000008,//此程序入口方法为非托管
COMIMAGE_FLAGS_TRACKDEBUGDATA =0x00010000,//loader和JIT需要追踪调试信息
![.NET对PE结构的扩展_休闲_02](http://www.sinoit.org.cn/NewsLetter/NO.2/images/20080202-1_clip_image004.jpg)