.net 理解PE可执行文件的.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

我正在尝试创建一个简单的CIL代码反编译器。我已经成功地正确加载了标题和节,现在我正在努力处理.text节

这是我的测试应用程序:

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可执行代码和相应数据的更多详细说明,请获取