- 1、本文档共39页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
.NET文件格式
The .NET File Format
by Daniel Pistelli
目录
* 介绍
* 开始
* .NET PE 文件
* .NET 目录
* 元数据区块
* 元数据表
* 方法
* #Blob 流
* 结论
介绍
.NET 文件格式标准是公开的,你可以在微软网站和你的.NET SDK 文件(查看“Partition II
Metadata.doc ”) 中找到,但是这些资料更像是一个参考,而不是真正的指南。实际上对.NET 文件格
式的描述是非常有用的。我认为,在拥有 WinNT.h 文件和拥有 WinNT.h 文件结构和成员的完整解释
之间有极大的不同。微软给出了 WinNT.h 文件的一些解释,但是许多信息描述的并不清楚。当然,
学习本文需要你对 PE 文件格式有非常清楚的了解。如果你对 PE 文件的格式还不是很了解,你应该
首先学习 PE 文件格式知识,否则,你将不能充分理解本文。注意一点:我不打算去解释如何使用微
软提供的函数库去获取.NET 文件格式,我将解释的是格式本身。
本文基于.NET 2.0 框架。
开始
现在唯一存在的查看和编辑.NET 文件格式的工具是我的 CFF 浏览器。请原谅我为宣传此工具
发送的广告邮件,但是你需要这个工具去挖掘.NET 文件格式的内部结构。正是由于这个原因我开发
了此工具。你最终所需要的参考文档是我上面提到过的,并且你能够在你的 SDK 框架中的Include
文件夹下找到。(例如,C:\...\Microsoft.NET\SDK\v2.0\include)。
.NET PE 文件
在开始学习元数据和相关其他成员之前,有必要对.NET PE 文件有一个大概的了解。它们在默
认情况下包括三个部分:.text,.reloc,.rsrc。.text 区块包括输入表,输入地址表,和.NET 区块。.reloc
仅是对入口点指令跳转地址的重新部署 (这是 IAT 中包含的唯一地址) 。IT counts 只是一个输入模
块(mscoree.dll)和一个输入函数(_CorExeMain 用于执行,_CorDllMain 用于动态链接库文件) 。.rsrc 区
块包含的是当.NET 区块拥有所有其他资源后用于可执行的主要图标。程序在运行时是会监视这些区
块标识符的,当你改变它们时,程序集将不会开始运行。
.NET 目录
PE 中以前的 COM 目录现在成了.NET 目录(我是这么称呼它) 。这个区块从 COR20 结构开始,
也叫做 CLI 头:
// COM+ 2.0 header structure.
typedef struct IMAGE_COR20_HEADER
{
// Header versioning
DWORD cb;
WORD MajorRuntimeVersion;
WORD MinorRuntimeVersion;
// Symbol table and startup information
IMAGE_DATA_DIRECTORY MetaData;
DWORD Flags;
// DDBLD - Added next section to replace following lin
// DDBLD - Still verifying, since not in NT SDK
// DWORD EntryPointToken;
// If COMIMAGE_FLAGS_NATIVE_ENTRYPOINT is not set,
// EntryPointToken represents a managed entrypoint.
// If COMIMAGE_FLAGS_NATIVE_ENTRYPOINT is set,
// EntryPointRVA represents an RVA to
文档评论(0)