Windows Pe 第三章 PE头文件(中)】的更多相关文章

第三章  PE头文件 本章是全书重点,所以要好好理解,概念比较多,但是非常重要. PE头文件记录了PE文件中所有的数据的组织方式,它类似于一本书的目录,通过目录我们可以快速定位到某个具体的章节:通过PE文件头部分对某些数据结构的描述,我们也可以定位到那些不在头文件部的信息,比如导入表数据.导出表数据.资源表数据等. 3.1  PE的数据组织方式 这一节说了很多,举了两个例子,分别是图书馆存书1和图书馆存书2,细节我不介绍了,是基本的数据结构应用,没有难点.最后说PE数据组织方式类似于存书2的例子…
这一章的上半部分大体介绍了下PE文件头,下半部分是详细介绍里面的内容,这一章一定要多读几遍,好好记记基础概念和知识,方便之后的学习. 简单回忆一下: 3.4  PE文件头部解析 3.4.1 DOS MZ头 IMAGE_DOS_HEADER DOS MZ头的下面是DOSS Stub.整个DOSS Stub是一个字节块,其内容随着链接时使用的连接器不同而不同,PE中没有与之对应的相关结构. 3.4.2 PE头标识Signature 紧跟在DOS Stub后面的是PE头标识Signature.与大部分…
3.5  数据结构字段详解 3.5.1  PE头IMAGE_NT_HEADER的字段 1.IMAGE_NT_HEADER.Signature +0000h,双字.PE文件标识,被定义为00004550h.也就是"P""E"加上两个0,这也是PE这个称呼的由来.如果更改其中任何一个字节,操作系统就无法把该文件识别为正确的PE文件.通过修改这个字段,会导致PE文件在32位系统中加载失败,但由于这个文件的其他部分(特别是DOS头)还没有被破坏,系统还是可以识别出其为DOS…
RVA-FOA之间转换 1.首先PE头加载到内存之后是和文件头内容一样的,就算是偏移不同,一个是磁盘扇区大小(400H)另一个是内存页大小(1000H),但是因为两个都是开头位置,所以相同. 2.看下IMAGE_SECTION_HEADER定义 也就是这样: 然后就可以算了(RVA->FOA) (1) RVA20 < RVA < RVA30 可以知道在第二节 (2) 然后 off = RVA - RVA20 ,得出距离第二节的偏移off (3) FOA = FOA 20 + off 求出…
获取pE头相关的内容,就是类似如下内容 原理:比较简单,直接读取PE到内存,然后直接强转就行了. #include <windows.h> #include <stdio.h> #include <tchar.h> #pragma warning(disable:4996) void viewImageFileCharacteristics(WORD); int _tmain(int argc, TCHAR *argv[]) { PIMAGE_DOS_HEADER pI…
一. 首先写了java文件: public class HeaderFile { private native void  doVoid(); native int doShort(); native void doArray(Object[] o ); native int doInt(int i);      //byte ,short ,int,long,float,double ,boolean,char native int doInt(double d);    //byte ,sh…
源: http://blog.csdn.net/lqk1985/archive/2008/10/24/3136364.aspx 如何组织编写模板程序 发表日期: 1/21/2003 12:28:58 PM 发表人: Nemanja Trifunovic 前言常遇到询问使用模板到底是否容易的问题,我的回答是:“模板的使用是容易的,但组织编写却不容易”.看看我们几乎每天都能遇到的模板类吧,如STL, ATL, WTL, 以及Boost的模板类,都能体会到这样的滋味:接口简单,操作复杂. 我在5年前开…
源: http://blog.csdn.net/lqk1985/archive/2008/10/24/3136364.aspx 如何组织编写模板程序 发表日期: 1/21/2003 12:28:58 PM 发表人: Nemanja Trifunovic 前言 常遇到询问使用模板到底是否容易的问题,我的回答是:"模板的使用是容易的,但组织编写却不容易".看看我们几乎每天都能遇到的模板类吧,如STL, ATL, WTL, 以及Boost的模板类,都能体会到这样的滋味:接口简单,操作复杂.…
c语言头文件中定义全局变量的问题 (转http://www.cnblogs.com/Sorean/) 先说一下,全局变量只能定义在 函数里面,任意函数,其他函数在使用的时候用extern声明.千万不要往头文件里面写定义(int aa). 即使是写,也只写声明 即可 extern int aa. 问题是这么开始的: 最近在看一个PHP的扩展源码,编译的时候的遇到一个问题: ld: 1 duplicate symbol for architecture x86_64 仔细看了一下源码,发现在头文件中…
在头文件中声明class 类 与 include类所在的头文件的理解: 在头文件中,声明类 它告诉编译器:存在这样的类.而实际的类则可以位于同一个编译单元中,也可以放在其他编译单元中.没有这个类原型,编译器将不会让我们编译通过. 在头文件中引用 类所在的头文件, 区别和结果: 引用class声明和引用class头文件都可以编译通过! 引用class声明显得简洁,一目了然,不用将其头文件都加载: 但是在对应的实现的.cpp文件中,必须要引入class所在的头文件,因为这样在cpp文件中才能找到对应…