pe文件中的sizeofimage是什么意思?$300 for you!(300分)

  • 主题发起人 主题发起人 远帆
  • 开始时间 开始时间

远帆

Unregistered / Unconfirmed
GUEST, unregistred user!
在分析pe文件格式时对sizeofimage意义不太明了。下面是我看到的资料,但是不太明白。
“載入器必須在意的整個image 大小。它的範圍從image base 開始,直到最後㆒個section
為止。最後㆒個section 的尾端必需是SectionAlignment 的倍數。”

下面是我分析得到的某pe文件的资料,请告诉我如何计算它。
(size of image is:516096 ($7E000))

Dos sub signal 'MZ' is right!
pehead start at:256 ($100)
Pe sub signal 'PE' is right!

*********PE文件物理分布的信息************
the program run at intel machine
the pe file has:8 Section.

the pe file create at:1992-6-20 6:22:17
the pe file has:0 symbol.
the pe file optional head size:224 ($E0)
the pe file type is:33166 ($818E)
*********PE文件物理分布的信息************

*********PE文件逻辑分布的信息************
the optional head signal ($010b) is Right
the link program's version is:2.25
the size of code is:417280
the init data size is:72704
the uninit data size is:0

the first command position(rva) is:421236 ($66D74)
the base of code is:4096 ($1000)
the base of data is:421888 ($67000)
the base of image is(PE文件的装载地址):4194304 ($400000)

the Alignment of section is(块对齐):4096 ($1000)
the Alignment of file is(文件对齐):512 ($200)

the pe file run under:4.0 system.
the pe file version is:0.0

size of image is:516096 ($7E000)
size of Headers is(所有头+节表的大小):1024
the pe file check sum:0

本程序是 GUI 程序

IMAGE_DATA_DIRECTORY 结构数组 dd 长度=16
<下面是IMAGE_DATA_DIRECTORY 结构数组,其长度为dd*8>
dd*8=128
dd*8+nowpos=504
<下面是节表数组,其开始于dd*8+nowpos>
*********PE文件逻辑分布的信息************

*********PE文件结表的信息************
---CODE---小结
该段真实长度:417212 ($65DBC)
该块的RVA:4096 ($1000)
该块物理长度:417280 ($65E00)
该块物理偏移:1024 ($400)
重定位的偏移:0
行号表的偏移:0
重定位项数目:0
行号表的数目:0
----------------------------------
块属性:1610612768 ($60000020)
本节包含代码
本节可以执行
本节可读
----------------------------------

---DATA---小结
该段真实长度:4604 ($11FC)
该块的RVA:421888 ($67000)
该块物理长度:4608 ($1200)
该块物理偏移:418304 ($66200)
重定位的偏移:0
行号表的偏移:0
重定位项数目:0
行号表的数目:0
----------------------------------
块属性:3221225536 ($C0000040)
本节包含已初始化的数据
本节可读
本节可写
----------------------------------

---BSS---小结
该段真实长度:3457 ($D81)
该块的RVA:430080 ($69000)
该块物理长度:0 ($0)
该块物理偏移:422912 ($67400)
重定位的偏移:0
行号表的偏移:0
重定位项数目:0
行号表的数目:0
----------------------------------
块属性:3221225472 ($C0000000)
本节可读
本节可写
----------------------------------

---.idata---小结
该段真实长度:9124 ($23A4)
该块的RVA:434176 ($6A000)
该块物理长度:9216 ($2400)
该块物理偏移:422912 ($67400)
重定位的偏移:0
行号表的偏移:0
重定位项数目:0
行号表的数目:0
----------------------------------
块属性:3221225536 ($C0000040)
本节包含已初始化的数据
本节可读
本节可写
----------------------------------

---.tls---小结
该段真实长度:16 ($10)
该块的RVA:446464 ($6D000)
该块物理长度:0 ($0)
该块物理偏移:432128 ($69800)
重定位的偏移:0
行号表的偏移:0
重定位项数目:0
行号表的数目:0
----------------------------------
块属性:3221225472 ($C0000000)
本节可读
本节可写
----------------------------------

---.rdata---小结
该段真实长度:24 ($18)
该块的RVA:450560 ($6E000)
该块物理长度:512 ($200)
该块物理偏移:432128 ($69800)
重定位的偏移:0
行号表的偏移:0
重定位项数目:0
行号表的数目:0
----------------------------------
块属性:1342177344 ($50000040)
本节包含已初始化的数据
本节为共享块
本节可读
----------------------------------

---.reloc---小结
该段真实长度:28528 ($6F70)
该块的RVA:454656 ($6F000)
该块物理长度:28672 ($7000)
该块物理偏移:432640 ($69A00)
重定位的偏移:0
行号表的偏移:0
重定位项数目:0
行号表的数目:0
----------------------------------
块属性:1342177344 ($50000040)
本节包含已初始化的数据
本节为共享块
本节可读
----------------------------------

---.rsrc---小结
该段真实长度:29696 ($7400)
该块的RVA:483328 ($76000)
该块物理长度:29696 ($7400)
该块物理偏移:461312 ($70A00)
重定位的偏移:0
行号表的偏移:0
重定位项数目:0
行号表的数目:0
----------------------------------
块属性:1342177344 ($50000040)
本节包含已初始化的数据
本节为共享块
本节可读
----------------------------------
*********PE文件结表的信息************
 
大富翁上没有高手吗?
连跟贴的勇气也没有?
 
哎,茕茕孑立,形影相吊!
:(
 
SizeOfImage是指内存中整个PE映像体的尺寸,
或者说是装载程序应该保证的装入文件各部分的总长。
SizeOfImage是指装入文件从Image Base到最后一个块的大小,
最后一个块根据其大小往上取整。
 
是啊,那么怎么计算出sizeofimage的值呢?
就用上面的例子,如何计算出$7e000呢?
 
http://www.csdn.net/dev/Format/
有PE格式的说明
 
sizeofimage是内存中整个PE映像体的尺寸,也就是所有头和节经过节对齐处理后的大小。
Continue ......
;
 
continue各位兄弟!:)
我希望知道$7e000是怎么算出来的。
关于格式的说明我看了N多,可是还是不理解。
 
将所有头和节经过节对齐处理,是计算的前提;
Continue ........
 
当然对齐了,何况我并没有对文件进行改写。
 
我的资料中sizeofimage的解释同卷起千堆雪tyn,我不太明白你的意思
为什么一定要知道这么计算,delphi中有_IMAGE_OPTIONAL_HEADER结构
你用流装入一个pe文件,当到达optional header时,将整个结构装入此
类型的变量,然后就是答案 ;
 
因为在修改pe文件后可能需要修改这个值文件才能正常运行,所以我希望计算出来.
我试过了,pe文件中这个值要求并不是很严,在一定范围内程序都可以运行,可是
我总不能瞎猜一个值,是吧?
 
我对PE文件很有兴趣,我手头上也有点可以研究的程序,希望与你交流一下
我的qq:4463035
 
http://2ccc.com/softview.php?type=m&softid=2
是我做的一个工具,可以得到文件头的信息.
那个sizeofimage上面已经说了,就是是指装入文件从Image Base到最后一个块的大小
可选文件头还有一个信息,就是filealignment,通常是$200[512],
也就是说如果你增加了一个section,比如大小为 $1305,那么首先要section对齐
比如sectionalignment为$1000 ;[4096]通常也是这个值,那么对其后就是 $2000,
然后文件印象对齐以$200为准,对齐后应该是sizeofimage+$2000,
我的大致理解就是这样.
 
还没有一个人能准确算出sizeofimage
please continue
 
气死我了!气死我了!
竟然是计算出了问题!
 
都怪我草稿纸写得太乱,否则我早就算出了
:(
 
等待yzhshi来了一起发分!
 
你是不是要寫病毒啊
 

Similar threads

回复
0
查看
1K
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
后退
顶部