【问题标题】:Strange Value in EXE headerEXE 标头中的奇怪值
【发布时间】:2010-02-02 11:08:30
【问题描述】:

我看到一个奇怪的值放在 EXE 标头中

00000000 :4D 5A 90 00 03 00 00 00 - 04 00 00 00 FF FF 00 00
00000010 :B8 00 00 00 00 00 00 00 - 40 00 00 00 00 00 00 00
00000020 :00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00
00000030 :00 00 00 00 00 00 00 00 - 00 00 00 00 A8 00 00 00
00000030 :00 00 00 00 00 00 00 00 - 00 00 00 00 A8 00 00 00 <-

我不知道 A8 在那里做什么,但如果我用零替换它,我的程序就不会执行。

一句话:那是什么?

另外,能否给我提供完整 MS DOS 标头的链接?

【问题讨论】:

  • 你为什么要乱搞程序头文件?如果我们了解您为什么关心里面的内容,这可能会有所帮助。还有这是什么平台?
  • 这里有一个文档可以帮助你:thehackerslibrary.com/?p=377

标签: windows portable-executable executable-format


【解决方案1】:

PE 的第一部分是 MSDOS 存根;在 0x3C(你的“A8”所在的位置)有 PE 文件签名的偏移量。如果你将它归零,加载器将无法找到 PE 签名,并且会拒绝加载它(或者将它作为一个 MS-DOS 可执行文件加载,我没有尝试过)。 如需更多信息,请参阅PE format specifications

【讨论】:

    【解决方案2】:

    偏移量 0x3c 处的 DWORD 是新 EXE 标头的偏移量,即 IMAGE_NT_HEADERS。因此,如果您更改那里的值,PE 加载器将找不到新的 EXE 标头。

    【讨论】:

    【解决方案3】:

    我怀疑它是新PE头的偏移量,前30个奇数字节是MS-DOS头,'A8'所在文件的偏移量对应于结构_IMAGE_DOS_HEADER中的字段称为LONG e_lfanew; // File address of new exe header; 正是值 'A8' 将成为包含此信息的新 IMAGE_NT_HEADER 的一部分

    • DWORD 签名;
    • _IMAGE_FILE_HEADER 文件头;
    • _IMAGE_OPTIONAL_HEADER 可选标头;

    前两个字节是可执行文件的原始 MS-DOS 标头,如以下常量所示:WORD IMAGE_DOS_SIGNATURE = 0x5A4D; // MZ; IMAGE_NT_HEADER 具有此签名以标识它是 NT 平台的可执行文件DWORD IMAGE_NT_SIGNATURE = 0x00004550; // PE00;

    您将在名为 pe.h 的头文件中找到所有这些信息。

    发生的情况是您清除了值“A8”,加载程序找不到 IMAGE_NT_HEADER 并因此失败。

    【讨论】:

      猜你喜欢
      • 2019-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-20
      相关资源
      最近更新 更多