【问题标题】:Virtual size and physical size虚拟尺寸和物理尺寸
【发布时间】:2021-07-10 16:15:55
【问题描述】:

我正在分析一个 PE 可执行文件,我想知道为什么物理大小小于第二部分的虚拟大小?

00000FEC 和 00000E00

究竟什么是物理尺寸以及它是如何计算的?有时大于虚拟大小,有时小于虚拟大小

#  Name   VirtSize RVA      PhysSize Offset
1 .text   000C44C1 00001000 000C4600 00000800
2 .data   00000FEC 000C6000 00000E00 000C4E00
3 .rsrc   00000520 000C7000 00000600 000C5C00
4 .reloc  0000B098 000C8000 0000B200 000C6200

【问题讨论】:

  • 我很确定“VirtSize”就是 ELF 所说的“memsz”,而“PhysSize”就是 ELF 所说的“filesz”(ELF 有更好的名字)。请注意,MMU 意义上的“虚拟内存”通常是不相关的。我知道(在 ELF 上)memsz 更小,因为它不包括 BSS(初始化为 0)。我推测文件大小可能会四舍五入?
  • 可能是对齐方式

标签: portable-executable


【解决方案1】:

虚拟大小表示节的“实际”大小,一旦它被映射到内存,而物理大小是在 PE 文件中为节数据分配的字节数。请注意,物理大小始终是文件块大小(512 字节)的倍数,因此它可能在对应于实际节数据的字节之后包含一些填充字节。

如果物理大小大于虚拟大小,正是因为section数据被填充到文件块大小的倍数(可以看到大小差异会小于512字节)。

如果虚拟大小大于物理大小,这是因为该节以零/空字节结尾,并且零在 PE 文件中没有明确表示以节省空间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    相关资源
    最近更新 更多