在 Windows PE 文件中,当 2 个部分具有相同的原始地址时会发生什么?

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

我正在查看一个用 UPX 打包的 PE 可执行文件,各个部分的布局如下:

UPX0:原始地址:0x400,原始大小:0x0,虚拟地址:0x1000,虚拟大小:0x6000

UPX1:原始地址:0x400,原始大小:0xC00,虚拟地址:0x7000,虚拟大小:0x1000

UPX0 部分的原始大小为零,并且具有与 UPX1 相同的原始地址。我的问题是,当 PE 可执行文件加载到内存中时,哪些数据会进入 UPX0 部分?

根据我读过的其他信息,当虚拟大小大于节的原始大小时,Windows 加载程序会用 0 填充节。由于 UPX0 的原始大小为 0,这是否意味着加载可执行文件时整个部分最初都被 0 填充?或者虚拟地址 0x1000 - 0x1C00 (UPX0) 填充的数据是否与虚拟地址 0x7000 - 0x7C00 (UPX1) 和地址 0x1C01 - 0x6FFF (UPX0) 填充的数据相同?还是发生了其他事情?

reverse-engineering portable-executable
1个回答
0
投票

来源:@0xC0000022L

您的第一个假设是正确的,内存中的 UPX0 部分将被初始化为全零。

并且,由于 UPX0 原始大小为 0x0,因此加载时将填充 0x0,并且 UPX1 会将数据定位在该位置。

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