windows - PE 文件中的 DOS stub

标签 windows exe dos portable-executable

这个问题在这里已经有了答案:





What's this extra bytes?

(1 个回答)


11 个月前关闭。




最近,我使用十六进制编辑器分析了一些 Windows 可执行文件。 PE 头从地址 0x100 开始,因此在 PE 镜像实际开始之前有 256 字节的数据。前 256 个字节:
First 256 Bytes of a Windows executable
我知道以下有关文件结构的信息

  • 0x00 - 0x3F:这是 MZ header (64 字节长)。
  • 0x40 - 0x4D:这 14 个字节编码 7 个 x86(16 位模式)指令,用于将“此程序无法在 DOS 模式下运行。\r\r\n”打印到屏幕上,使用 DOS 系统调用(中断 0x21 )。
  • 0x4E - 0x78:这是字符串“This program cannot run in DOS mode.\r\r\n”,末尾有一个美元符号,它告诉 DOS 这是字符串的结尾。
  • 0x79 - 0x7F:这些是 NULL 字节;我猜他们是为了对齐而插入的。

  • 所以我知道前 128 个字节是做什么用的。我的问题是:接下来的 128 个字节 (0x80 - 0xFF) 用于什么? (PE 图像在它们之后的 0x100 处开始。)

    最佳答案

    就是所谓的无证"Rich header" .它是由 Microsoft 链接器插入的弱加密数据块,指示使用了哪些 Microsoft 工具来生成可执行文件。它包括来自链接的目标文件的版本信息,因此包括有关使用了哪些编译器、汇编器和其他工具的信息。
    解码 Rich 的 Rich header 搜索标记,然后获取后面的 32 位加密 key 。然后从 Rich 向后工作标记,将 key 与存储在那里的 32 位值进行异或,直到找到解码的 DanS标记。在这两个标记之间将是一个 32 位值对的列表。该对的第一个值标识所使用的 Microsoft 工具,第二个值指示使用该工具创建的链接目标文件的数量。工具 id 值的高 16 位部分表示它是什么类型的工具,低 16 位部分标识工具的构建版本。

    关于windows - PE 文件中的 DOS stub ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65168544/

    相关文章:

    c++ - 如何判断在 Windows Mobile 6.5 中按下某个键 (c++)

    go - 如何将响应编写器和 http 请求传递给 Go 中的可执行文件?

    WPF。将DLL嵌入到EXE中

    windows - 运行Perl脚本通过DOS命令提示符调用网页?

    assembly - 如何在 assembly 中打印笑脸?

    assembly - X86指令在实模式下关闭计算机?

    r - 关闭从 R 启动的外部应用程序

    windows - R 未检测到 Rtools

    C:Windows 与 Linux 中的 strtok 和换行符

    php - 提取内部 EXE 信息