如何从页眉和/或页脚

时间:2016-01-08 19:30:44

标签: windows portable-executable

假设您有想要刻录的数据流或字节块,您如何确定可执行文件的大小?

PE可执行格式中有许多标题,但我使用哪些标题部分来确定(如果可能)可执行文件的总长度?

这是文件格式的图片。

PE File Format

1 个答案:

答案 0 :(得分:5)

如果PE文件格式正确,则计算可简化为(伪代码):

size = IMAGE_NT_HEADERS.OptionalHeader.SizeOfHeaders

foreach section_header in section_headers:
    size += section_header.SizeOfRawData

其中:

SizeOfHeaders字段给出了所有标头的长度(注意:包括16位存根)。

  • 每个部分标题都是IMAGE_SECTION_HEADER结构
  • SizeOfRawData字段给出磁盘上每个部分的长度。

记事本示例(Windows 10):

  • SizeOfHeaders:0x400

enter image description here

    每个部分的
  • SizeOfRawData
    • .text:0x15400
    • .data:0x800
    • .idata:0x1A00
    • .rsrc:0x19C00
    • .reloc:0x1600

(注意:SizeOfRawData在下图中称为Raw Size

enter image description here

总结一切:

>>> size_of_headers = 0x400
>>> sec_sizes = [0x15400, 0x800, 0x1a00, 0x19c00, 0x1600]
>>> size_of_headers + sum(sec_sizes)
207872
>>> 

总大小:207872字节。

验证

enter image description here

注意:上述计算并未考虑PE是否形成错误或是否存在覆盖。