鱼C论坛

 找回密码
 立即注册

PE文件格式及相关资料

热度 87已有 6488 次阅读2011-3-19 17:13 |个人分类:系统篇

PE文件格式应用于所有32位Windows系统:Windows 9X, Windows NT,Windows 2000及Windows XP(Vista已经对PE格式进行了升级,也出现了PE64),而在MSDN 98中有PE的大量详细资料(按目录:MSDN Library Visual Studio 6.0 | Specification | Platforms | Microsoft Portable Executable and Common Object File Format Specification)。
 
    PE文件内容被分割为不同的区段(Section),每一区段中可能包含代码或数据。各区段按页边界对齐,区段没有大小限制,是一个连续结构。每一个区段在内存中都有它自己的一套属性,比如:这个区段是否包含代码、是否只读或可读/写等。每一个区段都有不同的名字,这个名字用来表示区段的功能。例如:
.text 是在编译或汇编结束时产生的一种块,它的内容全是指令代码; 
.rdata 是运行期只读数据;
.data 是初始化的数据块;
.idata 包含其它外来DLL的函数及数据信息,即导入表;
.rsrc 包含模块的全部资源,如图标、菜单、位图、对话框等。

Note:使用区段名只是方便人们使用,而对操作系统来说是无关紧要的,因此可将上面区段名任意更改而不会影响PE文件执行。

    PE文件非常好的一个特性是其在磁盘上的数据结构与在内存中的结构是一致的。在X86系统中,每个内存页大小为4KB(即0x1000字节)。所以,在X86系统中,PE文件区段(Section)的内存对齐值一般是0x1000,在内存中的每个区段的起始地址为0x1000的倍数。而磁盘PE文件对齐值一般为0x200(即512字节,扇区块大小),所以PE文件中每个区段的起始地址为0x200的倍数。在磁盘PE文件中,区段间的间隙用0x00来填充。由于PE文件在磁盘和在内存中的对齐值不同,所以往往所占用的空间也不相同(在内存中往往占用更多空间)。磁盘上的PE文件和加载进内存中的PE文件比较图如下:

 
    VC编译器默认编译时,exe文件基地址(ImageBase)是0x00400000,DLL文件基地址是0x10000000,可以在链接时使用/BASE参数来改变基址。
 
    我们可以利用一些现成的工具来直观地查看PE文件内容和结构,加深对PE文件格式的理解。这样的工具有:LordPE、PEditor、Stud_PE等。

路过
1

鸡蛋
10

鲜花
70

握手
1

雷人

刚表态过的朋友 (82 人)

发表评论 评论 (10 个评论)

回复 lin3722 2012-4-26 14:30
这么好的文章,竟然没有人坐沙发...
提示下各位看官:0x前缀,是十六进制的表示方式.例如:十六进制:0xA,十进制就是:10.
刚刚,没有想起来,以为0x的意思是0乘以....
回复 bmw 2013-7-17 13:23
非常感谢小甲鱼
回复 菜鸟想飞 2013-9-17 09:49
空间改版的 感觉视频中的那些文章都找不到了
回复 xiejiale 2013-10-10 12:41
谢谢控制啊
回复 netbea 2014-5-21 09:47
谢谢
回复 HUSTIS 2014-8-24 10:18
非常感谢
回复 nemon 2014-10-9 23:16
非常感谢
回复 tzblue 2014-11-20 21:24
读小甲鱼的文章如饮美酒
回复 湫湫猪 2019-5-30 10:55
教学视频里的日志找不到,感谢小甲鱼的这篇文章 ,不过为什么图片显示叉叉看不了。
回复 呆萌 2019-6-21 11:15
表示进制不太理解,看了就忘掉了

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-4 06:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部