首页
社区
课程
招聘
[旧帖] [求助]关于PE格式文件中的一些问题 0.00雪花
发表于: 2007-8-19 14:52 3664

[旧帖] [求助]关于PE格式文件中的一些问题 0.00雪花

2007-8-19 14:52
3664
任何一个PE格式文件(包括.exe和.dll形式存在的,当然实际编程中不一定以这2种形式存在,只要符合PE格式规范的都是这种类型,不论以什么扩展名的形式存在,仅个人理解),是不是只有:
1、编程者编写的程序(包括代码、数据)只是PE格式文件中的section部分的代码和数据呢?
2、所有PE头(包括MS DOS 头、DOS STUB、PE 文件标志、
PE 文件头、PE 可选项头以及section[节]头)都是编译器根据运行平台加入的?
3、PE 格式文件按上述的顺序连续存放,特别是节头前的部分,为什么PE 文件标志的偏移只能由DOS 头结构中的域e_lfanew 才能指定,是不是由于DOS STUB 部分的字节大小不确定引起的?
4、文件对齐和节对齐
(1)、文件对齐是不是只在磁盘形式存在的文件中还是磁盘文件和内存映像中都涉及到或还有其他情况?
(2)、节对齐只针对内存影象还是磁盘文件和内存映像均涉及或还有其他情况?
5、microsoft 在很多结构或其他类型定义时一般都定义了预留(reserved)了一些空间,是不是多数情况并非为以后所需时保留的,而是为了对齐(以空间换时间)设置的?

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
参与一下讨论哈
1。编程者编写的程序(包括代码、数据)只是PE格式文件中的section部分的代码和数据呢?
   我想程序数据和代码应该都是在段里面。不过具体在哪个段,还有段名是怎么样的,这些都是由编译器决定的,比如有的编译器将常量放在.rdata中,将已初使化的全局变量放在.data中,将未初使化的数据放.bss中,有些干脆就只有一个数据段,而且段名还不同,比如用.idata,DATA的。
   再有,数据段有时也可以放代码,比如溢出用到的ShellCode就放在数据段中,当然这是程序员自己的事。

2、所有PE头(包括MS DOS 头、DOS STUB、PE 文件标志、PE 文件头、PE 可选项头以及section[节]头)都是编译器根据运行平台加入的?
   每个段都或多或少的与平台有关,就拿MagicNumber来说,基本上就是用来标识平台的,有的段也有特殊的位用来表明代码的目标平台。

3、PE 格式文件按上述的顺序连续存放,特别是节头前的部分,为什么PE 文件标志的偏移只能由DOS 头结构中的域e_lfanew 才能指定,是不是由于DOS STUB 部分的字节大小不确定引起的?
   好像对于32位的PE文件,DOS STUB部分的大小都是100个字节。但为什么要通过e_lfanew来定位。我想这可能与灵活性和可扩展性有关吧。比如64位的PE文件我不知道怎么样的,或者到以后会不会叫NT STUB也不好说,因为DOS STUB的出现原因就是windows当时要兼容DOS2,所以在dos下运行32位程序总是会出现"this program needs windows NT"这样的提示.

关于4,5两个问题,我不甚了解,等待高手解答.
2007-8-26 10:40
0
游客
登录 | 注册 方可回帖
返回
//