windows EXE头中的奇怪值

nnt7mjpx  于 7个月前  发布在  Windows
关注(0)|答案(3)|浏览(91)

我看到一个奇怪的值放在一个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头(规格)?

t3psigkw

t3psigkw1#

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

x8goxv8g

x8goxv8g2#

我怀疑它是新PE头的偏移量,前30个奇数字节是MS-DOS头,0xA 8所在文件的偏移量对应于结构IMAGE_DOS_HEADER中的字段,称为

LONG e_lfanew;  // File address of new exe header

字符串
值0xA 8将是包含以下信息的新IMAGE_NT_HEADER的一部分:

  1. DWORD Signature;
  2. IMAGE_FILE_HEADER FileHeader;
  3. IMAGE_OPTIONAL_HEADER OptionalHeader;
    前两个字节是可执行文件中的原始MS-DOS头,如以下常量所示:
WORD IMAGE_DOS_SIGNATURE = 0x5A4D;      // MZ


IMAGE_NT_HEADER具有此签名以标识它是NT平台的可执行文件

DWORD IMAGE_NT_SIGNATURE = 0x00004550;   // PE00


您可以在名为pe.h的头文件中找到所有这些信息。
这里发生的是你擦除了值0xA 8,加载器找不到IMAGE_NT_HEADERS,因此失败了。

eeq64g8w

eeq64g8w3#

偏移量为0x3c的DWORD是新EXE头的偏移量,也就是IMAGE_NT_HEADERS。因此,如果您更改那里的值,PE加载器将无法找到新的EXE头。

相关问题