TestSwitch.rar里的PE文件很奇怪(这个文件是我自己代码编译出来的)
看图1
IMAGE_SECTION_HEADER (Count: 3) (Size: 0x0028H<40B>)(ROF: 0x000001C0)
Name VSize VAddress SOfRawData PToRawData
00 .text 0x00004E3C 0x00001000 0x00005000 0x00001000
01 .rdata 0x000008A8 0x00006000 0x00001000 0x00006000
02 .data 0x00003E24 0x00007000 0x00003000 0x00007000
看02 .data段
IMAGE_SECTION_HEADER.Misc.PhysicalAddress 是 0x00003E24
文件对齐是0x1000, 那么
IMAGE_SECTION_HEADER.SizeOfRawData 不应该是0x00004000吗?
为什么会是0x00003000
看
IMAGE_SECTION_HEADER..PointerToRawData 是 0x00007000
MAGE_SECTION_HEADER.SizeOfRawData 是0x00003000
文件大小是0x00007000 + 0x00003000 = 0x0000A000 = 40K 这个是正确的.
看
IMAGE_OPTIONAL_HEADER32.SizeOfImage是 0x0000B000;
使用OD加载该PE文件, .data段在内存中的大小是 0x00004000 (0x00007000--0x0000B000)
当然, 0x0000A000---0x0000B000这一段全是00的.
结论:
IMAGE_SECTION_HEADER.Misc.PhysicalAddress 应该是在内存中的没对齐时的大小(而不是文件中没对齐时的大小).
MAGE_SECTION_HEADER.SizeOfRawData 是在文件中对齐后的大小.
IMAGE_OPTIONAL_HEADER32.SizeOfImage 是PE文件加载到内存需要的内存大小.
这样理解, 这个PE文件不奇怪.
TestSwitch.rar:
http://download.csdn.net/detail/cay22/4381945