加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 如何从页眉和/或页脚确定PE可执行文件的大小

发布时间:2020-12-14 04:25:43 所属栏目:Windows 来源:网络整理
导读:假设您有一个数据流或要雕刻的字节块,您如何确定可执行文件的大小? PE可执行格式中有许多标题,但我使用哪些标题部分来确定(如果可能)可执行文件的总长度? 这是文件格式的图片. 解决方法 如果PE文件格式正确,则计算可以简化为(伪代码): size = IMAGE_NT_HE
假设您有一个数据流或要雕刻的字节块,您如何确定可执行文件的大小?

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

这是文件格式的图片.

PE File Format

解决方法

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

size = IMAGE_NT_HEADERS.OptionalHeader.SizeOfHeaders

foreach section_header in section_headers:
    size += section_header.SizeOfRawData

哪里:

> SizeOfHeaders是IMAGE_OPTIONAL_HEADER结构的成员.
>(IMAGE_OPTIONAL_HEADER结构是IMAGE_NT_HEADERS的一部分)

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在下图中称为原始大小):

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是否形成错误或是否存在叠加.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读