EXE 标头中的奇怪值

问题描述 投票:0回答:3

我看到 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 <-

我不知道

A8
在偏移量 3C 处做什么,但如果我用零替换它,我的程序就不会执行。

那是什么?

您能给我一个完整的 MS DOS 标头(规范)的超链接吗?

windows portable-executable executable-format
3个回答
4
投票

PE 的第一部分是 MSDOS 存根;在 0x3C(“A8”所在的位置)处有 PE 文件签名的偏移量。如果将其清零,加载程序将无法找到 PE 签名,并将拒绝加载它(或将其作为 MS-DOS 可执行文件加载,我没有尝试)。 有关更多信息,请参阅 PE 格式规范


4
投票

我怀疑它是新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
,因此失败。


3
投票

偏移量 0x3c 处的 DWORD 是新 EXE 标头的偏移量,又名 IMAGE_NT_HEADERS。因此,如果您更改此处的值,PE 加载程序将无法找到新的 EXE 标头。

© www.soinside.com 2019 - 2024. All rights reserved.