.net 理解PE可执行文件的.text部分
我正在尝试创建一个简单的CIL代码反编译器。我已经成功地正确加载了标题和节,现在我正在努力处理.text节 这是我的测试应用程序:.net 理解PE可执行文件的.text部分,.net,reverse-engineering,cil,portable-executable,.net,Reverse Engineering,Cil,Portable Executable,我正在尝试创建一个简单的CIL代码反编译器。我已经成功地正确加载了标题和节,现在我正在努力处理.text节 这是我的测试应用程序: using System; namespace Sample2 { class Program { static void Main(string[] args) { int localVarriableOne = 123; int localVarriableTwo
using System;
namespace Sample2
{
class Program
{
static void Main(string[] args)
{
int localVarriableOne = 123;
int localVarriableTwo = 654;
Console.WriteLine(localVarriableOne + localVarriableTwo);
}
}
}
.text节标题告诉我指针torawdata=0x0200
,这是我所期望的。现在,当我尝试跳到那个偏移量时,我遇到了奇怪的字符(标记为红色),这不是我所期望的。我以为我应该遇到方法头,无论是小的还是大的,但我似乎不正确。方法头应该设置第二最低位,而不取决于头类型
然而,我设法找到了我期望的CIL代码(标记为蓝色)!使用我参考资料中的CIL操作码,我发现代码符合我的期望:
ldc.i4.s 123
stloc.0
ldc.i4 456
stloc.1
...
现在我很困惑。当然,在我的方法声明之前有一些东西,但我找不到关于.text节的任何内容。如果有人能给我任何线索,我会非常高兴。.NET程序集不使用传统的
文本
段来存储其.NET代码-只有本机编译的代码才会出现。相反,它们在PE中使用只有.NET程序集具有的特殊CLR结构
PE文件中的一个“可选”头是CLR运行时头,它包含有关.NET特定结构在PE中的位置的所有关键信息
有关这方面的更多详细信息,请从msdn.com下载最新的PE规范
有关如何在PE中组织.NET可执行代码和相应数据的更多详细说明,请获取