PE文件就是exe文件和dll文件,前者是可执行文件,后者是动态连接库文件。两者的区别仅仅是字面上的,唯一的区别就是内部的一个字段标识这个文件是exe文件还是dll文件。

对于PE文件格式,举一个例子来说明比较清楚:

  比如我打开一个.exe文件,gvim.exe 也就是gvim的安装程序

这是打开之后的截图

  首先就是DOS头:前两个字节,5A4Dh 表示MZ,这只是一个DOS可执行文件标记,表示这个文件是一个可执行文件。

  DOS头的最后一个Double word 在地址3ch处,可以发现它的值是:0000 00D8 h 它指向真正的PE头。

  找到对应的PE头,第一个 Double word 是 0000 4550 h 代表的是PE.. 那么IMAGE_OPTIONAL_HEADER32的起始地址就是 D8h + 18h = F0h

  在IMAGE_OPTIONAL_HEADER32的基础上 F0h + 20h = 110h 就得到了SectionAlignment 这个字段,可以发现,它的值是:0000 1000 h,这是程序被装入内存的时候区块对齐大小,默认值是目标CPU的页尺寸,紧接着下一个字段是:FileAlignment 这个字段,它的值是:0000 0200 h,它是磁盘上PE文件内的区块对齐大小。

  PE头D8h + 78 h 就得到了DataDirectory 这个字段,它是一个16个元素的数组,数据类型是IMAGE_DATA_DIRECTORY,这个结构体有两个成员:第一个成员是数据块的起始RVA,第二个成员是数据块的长度。数组的第一个元素是Export Table,发现都是0,说明没有输出表;第二个元素是输入表,地址是0000 73A4 h 大小是 0000 00B4h 。

  用PE Editor 这个程序打开gvim.exe 文件,得到如下的结果,发现结果和上面是一样的,我还发现了刚才犯的一个错误,SectionAlignment 的值应该是1000h 也就是CPU页大小是4kB,刚才写成了100h……汗

PE文件格式 持续更新ing的更多相关文章

  1. Linux命令(持续更新ing)

    *.命令语法:  a.在进行参数设定时,通常为“-”号,若为完整参数名称,则输入“--”符号;  b.指令太长的时候,可以使用“\”符号使指令连续到下一行;  c.各种符号的意义:    ''     ...

  2. FireFox所支持的全部标签(持续更新ing)

    近期研究上各个浏览器的差别,得到一些资料,FireFox眼下所支持的全部标签类型,持续更新,供大家參考和学习,不喜勿喷哦 http://mxr.mozilla.org/seamonkey/source ...

  3. 大白话strom——问题收集(持续更新ing)

    本文导读: 1.基于storm的应用 2.storm的单点故障解决 3.strom与算法的结合学习4.杂记——常见问题的解答5.http://www.blogchong.com/catalog.asp ...

  4. Python:常见错误集锦(持续更新ing)

    初学Python,很容易与各种错误不断的遭遇.通过集锦,可以快速的找到错误的原因和解决方法. 1.IndentationError:expected an indented block 说明此处需要缩 ...

  5. vue2.0填坑有感(持续更新ing)

    1.请求数据 用本地json数据进行mock的时候,一般放在created 过程就Ok了,这样可以尽早获取数据:如果有依赖dom必须存在的清空,就放到mounted里面,具体用法如下所示: // cr ...

  6. Beta 讨论分析——持续更新ing

    wonderland Beta 讨论分析 标签(空格分隔): 软工实践 wonderland 主要工作: info信息: 1.关联账号界面:hbb 2.标签检索界面:hbb 3.近期活跃度(cf.hd ...

  7. 收藏的iOS技术站点汇总(持续更新ing)

    大牛博客 objc.io PS:经典,内容深而广 objc中国 NSHipster PS:非常多小细节 NSHipster 中文版 唐巧的技术博客 PS:LZ是唐巧的脑残粉- OneV's Den 王 ...

  8. Linux学习资料网站汇总链接(持续更新ing)

    排名不分先后. 学海无涯苦作舟. 博客: 1.slmba:LINUX博客原创大牛 2.edsionte's TechBlog:Linuxer (他的友情链接中还有一堆Linuxer,被公司屏蔽进不去. ...

  9. 生活小插曲(长篇连载,持续更新ing)^_^

    这个帖子,长期记录一些小小的生活插曲 在北京朋友开店了-关于同学开快餐店的故事.今天下午听说这个朋友在附近开了一个店,下午5点多吧,出门去他那里去了.走路过去的.在那里聊了将近一个小时吧.对最近我们自 ...

随机推荐

  1. 第三章:Git使用入门

    本文主要讲git的使用,其实网上这种教程已经很多了,但是还是要说一下,在这里先把基础的东西跟大家讲一下,然后再附上一个彩蛋,将一些别人不会提到的git技术,不要错过 哦! First: Git概念 1 ...

  2. ThinkPHP模板中如何操作session,以及如果session中保存的是数组的情况

    在ThinkPHP的模板中操作session时,可以参考ThinkPHP参考文档中的“模板—>系统变量”部分,在默认模板引擎中,语法如下: {$Think.session.user} //输出s ...

  3. Work around by " Due to heavy load, the latest workflow operation has been queued. " 分类: Sharepoint 2015-07-08 00:19 3人阅读 评论(0) 收藏

    I hope most of the users and developers might have come across above note and worried about it. Ther ...

  4. Hollister Outlet Store

    (link to hollisterco site), It's a major try. After a photographer's viewpoint, Which roughly splend ...

  5. webpack初学

    写在前面的话 阅读本文之前,先看下面这个webpack的配置文件,如果每一项你都懂,那本文能带给你的收获也许就比较有限,你可以快速浏览或直接跳过:如果你和十天前的我一样,对很多选项存在着疑惑,那花一段 ...

  6. redis缓存技术学习

    1 什么是redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串). list(链表).set(集合)和zset ...

  7. [网络技术][转]网卡的offload概念

    网络数据包分析 网卡Offload 对于网络安全来说,网络传输数据包的捕获和分析是个基础工作,绿盟科技研究员在日常工作中,经常会捕获到一些大小远大于MTU值的数据包,经过分析这些大包的特性,发现和网卡 ...

  8. JDBC操作步骤及数据库连接操作

    http://blog.csdn.net/joywy/article/details/7731305

  9. nodejs渲染模板

    为什么要用nodejs来渲染? 之前前端的任务就是用HTML+CSS 来高保真的还原UI所设计原图,偶尔会使用少量的jq来对页面添加一些特效,页面还要交付给后端开发人员进行数据填充(php jsp)等 ...

  10. MISC-极客大挑战-pen_and_apple.rar

    额   一道MISC的题目 关键词:NTFS数据流隐藏 链接:http://pan.baidu.com/s/1c14PM3A 密码:d7hn 拿到的是一个rar压缩文件,解压得到一个无节操的最近很流行 ...