首页 文章

了解PE可执行文件的.text部分

提问于
浏览
3

我正在尝试创建一个简单的CIL代码反编译器 . 我已经设法正确加载 Headers 和部分,现在我正在努力使用.text部分 .

这是我的测试应用程序:

using System;

namespace Sample2
{
    class Program
    {
        static void Main(string[] args)
        {
            int localVarriableOne = 123;
            int localVarriableTwo = 654;

            Console.WriteLine(localVarriableOne + localVarriableTwo);
        }
    }
}

.text节 Headers 告诉我 PointerToRawData = 0x0200 ,这是我的预期 . 现在,当我尝试跳到那个偏移时,我遇到了奇怪的字符(标记为红色),这不是我所期望的 . 我以为我似乎是正确的 . 假设方法头具有第二低位设置而不依赖于头类型 .

XVI

但是,我设法找到了我期望的CIL代码(标记为蓝色)!使用我的参考文献中的CIL操作码,我看到代码符合我的期望:

ldc.i4.s 123
stloc.0
ldc.i4 456
stloc.1
...

现在我很困惑 . 肯定在我的方法声明之前有一些东西,但我找不到任何关于.text部分的内容 . 如果有人能给我任何线索,我会非常高兴 .

1 回答

  • 4

    .NET程序集不使用传统的 text 段来存储它们的.NET代码 - 只有本机编译的代码才能存在 . 相反,它们在PE内部使用只有.NET程序集具有的特殊CLR结构 .

    PE文件中的一个“可选”标头是CLR运行时标头,它包含有关特定于.NET的结构在PE中的位置的所有关键信息 .

    有关详细信息,请从msdn.com下载最新的PE规范("Microsoft Portable Executable and Common Object File Format Specification") .

    有关如何在PE中组织多个.NET可执行代码和相应数据的更详细说明,请获取Serge Lidin's book on the .NET assembler .

相关问题