最近在学PE结构,遇到了个问题,我用PETool查看WinHex_x64.exe信息时,结表信息如下:
IMAGE_SECTION_HEADER (块表|区段|节表)结构如下:
------------------------------------------------------------
[成员] [地址(RAW)] [数据:RVA] [说明]
Name: 0x00000208 [UPX0] [名称,长度:8位(16字节)的ASCII码.]
VirtualSize: 0x00000210 00014000 [V(VS),内存中大小(对齐前的长度).]
VirtualAddress: 0x00000214 00001000 [V(VO),内存中偏移(该块的RVA).]
SizeOfRawData: 0x00000218 00000000 [R(RS),文件中大小(对齐后的长度).]
PointerToRawData: 0x0000021c 00000400 [R(RO),文件中偏移.]
PointerToRelocation: 0x00000220 00000000 [在OBJ文件中使用,重定位的偏移.]
PointerToLinenumbers: 0x00000224 00000000 [行号表的偏移,提供调试.]
NumberOfRelocations: 0x00000226 0000 [在OBJ文件中使用,重定位项数目.]
NumberOfLinenumbers: 0x00000228 0000 [行号表中行号的数目.]
Characteristics: 0x0000022c E0000080 [标志(块属性):20000000h 40000000h 80000000h 00000080h ]
------------------------------------------------------------
[成员] [地址(RAW)] [数据:RVA] [说明]
Name: 0x00000230 [UPX1] [名称,长度:8位(16字节)的ASCII码.]
VirtualSize: 0x00000238 0000C000 [V(VS),内存中大小(对齐前的长度).]
VirtualAddress: 0x0000023c 00015000 [V(VO),内存中偏移(该块的RVA).]
SizeOfRawData: 0x00000240 0000C000 [R(RS),文件中大小(对齐后的长度).]
PointerToRawData: 0x00000244 00000400 [R(RO),文件中偏移.]
PointerToRelocation: 0x00000248 00000000 [在OBJ文件中使用,重定位的偏移.]
PointerToLinenumbers: 0x0000024c 00000000 [行号表的偏移,提供调试.]
NumberOfRelocations: 0x0000024e 0000 [在OBJ文件中使用,重定位项数目.]
NumberOfLinenumbers: 0x00000250 0000 [行号表中行号的数目.]
Characteristics: 0x00000254 E0000040 [标志(块属性):20000000h 40000000h 80000000h 00000040h ]
------------------------------------------------------------
[成员] [地址(RAW)] [数据:RVA] [说明]
Name: 0x00000258 [.rsrc] [名称,长度:8位(16字节)的ASCII码.]
VirtualSize: 0x00000260 00002000 [V(VS),内存中大小(对齐前的长度).]
VirtualAddress: 0x00000264 00021000 [V(VO),内存中偏移(该块的RVA).]
SizeOfRawData: 0x00000268 00001C00 [R(RS),文件中大小(对齐后的长度).]
PointerToRawData: 0x0000026c 0000C400 [R(RO),文件中偏移.]
PointerToRelocation: 0x00000270 00000000 [在OBJ文件中使用,重定位的偏移.]
PointerToLinenumbers: 0x00000274 00000000 [行号表的偏移,提供调试.]
NumberOfRelocations: 0x00000276 0000 [在OBJ文件中使用,重定位项数目.]
NumberOfLinenumbers: 0x00000278 0000 [行号表中行号的数目.]
Characteristics: 0x0000027c C0000040 [标志(块属性):40000000h 80000000h 00000040h ]
------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------
由此可见,第一个第二个节表的PointerToRawData是一样的,说明这两个节起始位置一样,重叠了,为什么会这样?而且,跟据结表显示,第三个节是最后一个节,那么文件实际大小应该为
PointerToRawData + SizeOfRawData = 0x0000C400 + 0x00001C00 = 0xE000,也就是10进制的57344,可是PETool显示的是:
是否PE文件 :是
文件大小 :2351535 字节
不仅仅这个,还有很多exe在PETool中都是PE文件,但它们的大小都不等于最后一个节的PointerToRawData + SizeOfRawData.这是为什么,求解
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!