PhysicalAddress
是Misc
联盟的成员,定义如下:
typedef struct _IMAGE_SECTION_HEADER {
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
union {
DWORD PhysicalAddress;
DWORD VirtualSize;
} Misc;
DWORD VirtualAddress;
DWORD SizeOfRawData;
DWORD PointerToRawData;
DWORD PointerToRelocations;
DWORD PointerToLinenumbers;
WORD NumberOfRelocations;
WORD NumberOfLinenumbers;
DWORD Characteristics;
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
我知道通常用
VirtualSize
代替PhysicalAddress
,但是网上关于PhysicalAddress
的信息很少。
我很好奇这个字段的实际用途?这个字段历史上有用过吗,有相关例子吗?
Per 深入了解 PE:Win32 之旅 便携式可执行文件格式:
union { DWORD PhysicalAddress DWORD VirtualSize } Misc;
此字段在 EXE 或 OBJ 中具有不同的含义。 在 EXE 中,它保存代码或数据的实际大小。这是四舍五入到最接近的文件对齐倍数之前的大小。结构中稍后的 SizeOfRawData 字段(似乎有点用词不当)保存向上舍入的值。 Borland 链接器颠倒了这两个字段的含义并且看起来是正确的。 对于 OBJ 文件,该字段指示该节的物理地址。 第一个节从地址 0 开始。要在下一节的 OBJ 文件中查找物理地址,请将 SizeOfRawData 值添加到当前节的物理地址.