一个奇怪的PE文件

来源:互联网 发布:淘宝网免费开店流程 编辑:程序博客网 时间:2024/05/19 00:55

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