当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: PE学习笔记 PE 的意思就是 Portable Executable(可移植的执行体)。
 

 

 ·网络计算    »显示摘要«
    摘要: 网 络 计 算 20世纪90年代,internet蔓延到世界各地,成为人们沟通信息和协同工作的有效工具,更为重要的是,internet上汇集的成千上万的计算资源、数据资源、软件资源、各种数字化设备和控制系统共同构成了生产、传播和使用知识的重要载体。人们开始思考如何将物理上互连的众多资源汇聚起来,联合提供服务,重新认识网络计算技术的实质。 目前,网络计算正处于发展阶段,人们对它的定义已经形成了......
    摘要: 随着中间件技术的发展, dll越来越为程序员所关注,因为使用dll具有一系列优点,所以java/j2me/code/ target=_blank>程序设计人员可能更多的在自己的软件中采用这种技术。 下面我就把以前做过的一个简单的全程键盘钩子分析一下。 钩子[以下简称hook]是应用程序在microsoft windows 消息处理过程中设置的用来监控消息流并且处理系统中尚未到达目的窗口的某一......


PE学习笔记(一)

pe学习笔记

  【程序编程相关:显示JPG和GIF图片的简单方法

 pe 的意思就是 portable executable(可移植的执行体).pe文件结构的总体层次分布图: 【推荐阅读:文档—视窗结构批判

|dos mz header | 【扩展信息:http://www.myfaq.com

 --------------

|--------------|

|dos stub      |

|--------------|

|pe header     |

|--------------|

|section table |

|--------------|

|section 1     |

|--------------|

|section 2     |

|--------------|

|section ...   |

|--------------|

|section n     |

 --------------

 

一.pe文件格式的概要

1.1.dos mz header:

 所有 pe文件(甚至32位的 dlls)必须以一个简单的 dos mz header 开始.有了它,一旦程序在dos下执行,dos就能识别出这是有效的执行体,然后运行紧随 mz header 之后的 dos stub.

1.2.dos stub:

 dos stub(存根)实际上是个有效的 ms-dos .exe 或者.com 程序(如果文件格式不对会报错),在不支持 pe文件格式的操作系统中,它将通过简单调用中断21h服务9来显示字符串"this program cannot run in dos mode"或者根据程序员自己的意图实现完整的 dos 代码.它的大小一般不能确定.利用链接器(linker)的 /stub:filename 选项可以替换这个程序.

1.3.pe header:

 紧接着 dos stub 的是 pe header.pe header 是pe相关结构 image_nt_headers 的简称,其中包含了许多pe装载器用到的重要域.执行体在支持pe文件结构的操作系统中执行时,pe装载器将从 dos mz header (image_dos_header)中找到 pe header 的起始偏移量.因而跳过了dos stub 直接定位到真正的文件头pe header.

1.4.section table:

 pe header 接下来的数组结构 section table (节表).如果pe文件里有5个节,那么此 section table 结构数组内就有5个成员,每个成员包含对应节的属性.文件偏移量.虚拟偏移量等.

1.5.sections:

 pe文件的真正内容被划分成块,称之为section(节).每个标准节的名字均以圆点开头.sections 是以其起始位址来排列,而不是以其字母次序来排列.下面是常见的节名及作用:

 

节名   作用

.arch  最初的构建信息(alpha architecture information)

.bss   未经初始化的数据

.crt   c运行期只读数据

.data   已经初始化的数据

.debug   调试信息

.didata  延迟输入文件名表

.edata  导出文件名表

.idata  导入文件名表

.pdata      异常信息(exception information)

.rdata  只读的初始化数据

.reloc  重定位表信息

.rsrc  资源

.text   .exe或.dll文件的可执行代码

.tls  线程的本地存储器

.xdata  异常处理表

 

 节的划分是基于各组数据的共同属性,而不是逻辑概念.每节是一块拥有共同属性的数据,比如代码/数据.读/写等.如果pe文件中的数据/代码拥有相同属性,它们就能被归入同一节中.节名称仅仅是个区别不同节的符号而已,类似"data", "code"的命名只为了便于识别,惟有节的属性设置决定了节的特性与功能.

1.6.装载一pe文件的主要步骤:

1.当pe文件被执行,pe装载器检查 dos mz header 里的 pe header 偏移量.如果找到,则跳转到 pe header.

2.pe装载器检查 pe header 的有效性.如果有效,就跳转到pe header的尾部.

3.紧跟 pe header 的是节表.pe装载器读取其中的节信息,并采用文件映射方法将这些节映射到内存,同时付上节表里指定的节属性.

4.pe文件映射入内存后,pe装载器将处理pe文件中类似 import table(导入表)逻辑部分.

二.dos mz header 与 pe header

2.1.dos mz header 定义成结构 image_dos_header(64字节) .结构定义如下:


...   下一页
 ·mschart控件图象打印处理    »显示摘要«
    摘要: mschart图象打印的vc程序处理: 在vc中,实现打印比在vb中困难很多,在如题的问题中,vb的解决方案很简单: vb的解决方案: 原理:mschart.editcopy(拷贝控件显示图象) printer.print mschart.openclipboard(vb语句解释)(打印剪贴板内容) 但在vc中,打印不是一件容易的事,我把在网友帮助下解决的mschart控件的打印实现源......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE