我见过一个奇怪的价值置于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头?

有帮助吗?

解决方案

DWORD偏移量为0x3C是偏移的新EXE报头的,又名IMAGE_NT_HEADERS。所以,如果你改变的值出现,PE装载器不能找到新的EXE头。

其他提示

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

我怀疑它是偏移到新的PE头,第30奇数字是MS-DOS头,抵消入文件'A8'居住在相对应领域的结构 _IMAGE_DOS_HEADERLONG e_lfanew; // File address of new exe header;它是值'A8'会是部分的新的 IMAGE_NT_HEADER 其中包含的信息

  • 双字签名;
  • _IMAGE_FILE_HEADER FileHeader;
  • _IMAGE_OPTIONAL_HEADER OptionalHeader;

首两字节的原始MS-DOS头到的可执行所示,通过这个恒定: WORD IMAGE_DOS_SIGNATURE = 0x5A4D; // MZ;该IMAGE_NT_HEADER有这个签名,以确定它是一个可执行NT平台 DWORD IMAGE_NT_SIGNATURE = 0x00004550; // PE00;

你会发现所有这些信息在一个标题的文件名为 pe.h.

那里发生了什么是你消灭了值'A8',装载不能找到 IMAGE_NT_HEADER 因此失败。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top