PE文件格式学习随想
这个pe文件格式是数据结构的层次构造,具体是个什么构造,看具体的描述对象。这里就透露了个信号:既然是描述,那么数据结构就是从事物中抽象出来的关系了。数据结构的同志们BAIDU去吧,对不同的数据结构找应用领域的实例去学习把,跟着老师走,不用心的老师势必会只告诉你数据结构,不告诉你应用。
这个带层次的数据结构个人觉得他要解决下面几个大问题
1。能判断是pe格式
2.程序各个段在文件中的位置信息,这个叫文件偏移
3.程序在虚拟内存的各个段的偏移地址 这个叫做逻辑偏移
4.文件的装载物理地址起始位置,由于是固定值,鄙人有个猜想从这个物理地址起的一段地址空间是当前运行程序的专用位置
当前运行程序CPU时间轮到了,程序的相关信息会被保存到内存的其他地方去后,将其他程序的再加载到这块区域去。这里出了一个疑问:分页机制的硬件实现是两个矩阵将4G的内容给折起来的,1个矩阵是页号,另一个矩阵是4kb的偏移信息,是否在物理划分上每个不同的段(这个我习惯了叫段,应该是节),是只给了一个页面的大小。这个微软在磁盘上很慷慨,在内存上有名的小气,这个还和内存管理通着气的,天啦。这两个猜想望大牛指正
5。调用DLL函数的机制,这个是一个4G的线性空间被一分为2一半归系统一半归用户,这部分比较模糊。
6。调试信息,这个不深究,俺不学编译你连接
大致就这么几个大块内容,个人总结。望批评指正。
1.总体框架
3个成员 pe标识 文件头 扩展文件头
今天只做文件到虚拟内存的映射相关信息,由于是页面机制上面的 ,两个猜想算是虚拟到物理内存的映射把
1.这个头和扩展头是平级的
头对是个总体描述: 两个成员 节大小 扩展头大小
节大小: 是是把文件头部分不要后的大小 描述的是磁盘呢还是内存的。这个待解。个人觉得应该是磁盘上的
扩展头大小: 这个描述的是磁盘上的大小,这个不得了了,它告数了程序执行体的文件位置。数理是个加法计算,俺就不打了,手机点点辛苦。
不解的地方:这个头部文件都是要加载到内存中去的,加载到那个节上呢。木有节描述它的。再就是部分加载还是全部,这个木有资料,现在还推不出来,猜想:这个应该是长驻部分,知道程序结束。求解。
现在说说对齐
内存对齐
4kb这个都成公里了,不解释。页号是节的区分,这个节的起始地址就会是10000h,几个0忘掉了
磁盘对齐
微软是512 很显然对齐方式的不对,很简单的512的桶 水被到倒到10000的桶,拿点水问你这是512桶里的那桶水啊。你答什么呢。用文件偏移来代替偏移的86时代过去了,技术上了档次,可工资不上档次木天理
那么这个怎么映射的呢,COME ON OH YEAH深夜寂寞就来我床,我给你安慰
可扩展头
这个结构太他妈的长
这个表是对程序的一个总括
对一个程序做出定义,这里的偏移地址是虚拟偏移
1。程序代码段长度 ,偏移地址
2.程序数据段 长度和偏移地址
分两个 初始化 和 未初始化 这个做了个分类 只有大小,据印象在节表里有描述
3.什么线程什么堆我弄不清楚了
4。这个表里还有一个结构体,叫数据目录,放的是节表的逻辑偏移
节表是有属性值组织起来的
有 写读可执行 要了解这个
这个节的只是还没学到sorry,里面有两个属性是跟磁盘到虚拟相关的,1个是 文件偏移 一个是偏移地址
哎,知识信号越来越弱,我睡了。
希望大家共同学习共同进步,彼此借鉴指正,晚安,中国
[ 本帖最后由 zhu224039 于 2012-11-30 03:42 编辑 ]