PE文件的两种状态

1.在硬盘中

  • 节省硬盘空间
  • 硬盘对齐 内存对齐

2.在内存中

3.PE磁盘文件与内存映像结构图

PE文件为什么要分节

……

手动解析:PE文件

分析软件:飞鸽传书http://www.gpxz.com/soft/jiaoxue/wendang/219212.html

1. DOS头:
struct _IMAGE_DOS_HEADER {
0x00 WORD e_magic; //5A4D
0x02 WORD e_cblp; //0090
0x04 WORD e_cp; //0003
0x06 WORD e_crlc; //0000
0x08 WORD e_cparhdr; //0004
0x0a WORD e_minalloc; //0000
0x0c WORD e_maxalloc; //FFFF
0x0e WORD e_ss; //0000
0x10 WORD e_sp; //00B8
0x12 WORD e_csum; //0000
0x14 WORD e_ip; //0000
0x16 WORD e_cs; //0000
0x18 WORD e_lfarlc; //0040
0x1a WORD e_ovno; //0000
0x1c WORD e_res[4]; //0000 0000 0000 0000
0x24 WORD e_oemid; //0000
0x26 WORD e_oeminfo; //0000
0x28 WORD e_res2[10]; //0000 0000 0000 0000 0000 ……
0x3c DWORD e_lfanew; //000000E8
}; 2. 标准PE头
struct _IMAGE_FILE_HEADER {
0x00 WORD Machine; //014C
0x02 WORD NumberOfSections; //0004
0x04 DWORD TimeDateStamp; //4198C850
0x08 DWORD PointerT oSymbolTable; //00000000
0x0c DWORD NumberOfSymbols; //00000000
0x10 WORD SizeOfOptionalHeader; //00E0
0x12 WORD Characteristics; //010F
};
3. 可选PE头
struct _IMAGE_OPTIONAL_HEADER {
0x00 WORD Magic; //010B
0x02 BYTE MajorLinkerV ersion; //06
0x03 BYTE MinorLinkerV ersion; //00
0x04 DWORD SizeOfCode; //0001A000
0x08 DWORD SizeOfInitializedData; //0000C000
0x0c DWORD SizeOfUninitializedData; //00000000
0x10 DWORD AddressOfEntryPoint; //000183D7
0x14 DWORD BaseOfCode; //00001000
0x18 DWORD BaseOfData; //0001B000
0x1c DWORD ImageBase; //00400000
0x20 DWORD SectionAlignment; //00001000
0x24 DWORD FileAlignment; //00001000
0x28 WORD MajorOperatingSystemVersion; //0004
0x2a WORD MinorOperatingSystemVersion; //0000
0x2c WORD MajorImageVersion; //0000
0x2e WORD MinorImageVersion; //0000
0x30 WORD MajorSubsystemVersion; //0004
0x32 WORD MinorSubsystemVersion; //0000
0x34 DWORD Win32VersionValue; //00000000
0x38 DWORD SizeOfImage; //00027000
0x3c DWORD SizeOfHeaders; //00001000
0x40 DWORD CheckSum; //00000000
0x44 WORD Subsystem; //0002
0x46 WORD DllCharacteristics; //0000
0x48 DWORD SizeOfStackReserve; //00100000
0x4c DWORD SizeOfStackCommit; //00001000
0x50 DWORD SizeOfHeapReserve; //00100000
0x54 DWORD SizeOfHeapCommit; //00001000
0x58 DWORD LoaderFlags; //00000000
0x5c DWORD NumberOfRvaAndSizes; //00000010
0x60 _IMAGE_DA TA_DIRECT ORY DataDirectory[16];
};

零基础逆向工程17_PE结构01_PE头解析_手动的更多相关文章

  1. 零基础逆向工程21_PE结构05_数据目录表_导出表

    数据目录 1.我们所了解的PE分为头和节,在每个节中,都包含了我们写的一些代码和数据,但还有一些非常重要 的信息是编译器替我们加到PE文件中的,这些信息可能存在在任何可以利用的地方. 2.这些信息之所 ...

  2. 零基础逆向工程20_PE结构04_任意节空白区_新增节_扩大节添加代码

    向代码节添加代码实现 作者经过一周不断的失败,再思考以及无数次调试终于实现. 思路:八个步骤 1. 文件拷到文件缓冲区(FileBuffer) //图示见(零基础逆向工程18之PE加载过程) 2. 文 ...

  3. 零基础逆向工程22_PE结构06_导入表

    导入表结构 typedef struct _IMAGE_IMPORT_DESCRIPTOR { union { DWORD Characteristics; DWORD OriginalFirstTh ...

  4. 零基础逆向工程16_C语言10_宏定义_头文件_内存分配_文件读写

    #define 无参数的宏定义的一般形式为:#define 标识符 字符序列 如:#define TRUE 1 注意事项: 1.之作字符序列的替换工作,不作任何语法的检查 2.如果宏定义不当,错误要到 ...

  5. 零基础逆向工程23_PE结构07_重定位表_IAT表(待补充)

    重定位表 待补充 IAT表 待补充

  6. 零基础逆向工程19_PE结构03_代码节空白区添加代码_shellcode

    1.获取MessageBox地址,构造ShellCode代码 三种获取方法,参考文章末的一篇帖子. E8 E9计算公式 call 的硬编码:E8 00 00 00 00 jmp 的硬编码:E9 00 ...

  7. 零基础逆向工程18_PE结构02_联合体_节表_PE加载过程

    联合体 特点 1.联合体的成员是共享内存空间的 2.联合体的内存空间大小是联合体成员中对内存空间大小要求最大的空间大小 3.联合体最多只有一个成员有效 节表数据结构说明 PE 加载 过程 FileBu ...

  8. 零基础逆向工程24_C++_01_类_this指针_继承本质_多层继承

    1 类内的成员函数和普通函数的对比 1.1 主要是从参数传递.压栈顺序.堆栈平衡来总结. 1.参数传递:成员函数多传一个this指针 2.压栈顺序:成员函数会将this指针压栈,在函数调用取出 3.堆 ...

  9. 零基础逆向工程35_Win32_09_临界区_CRITICAL_SECTION结构

    1 引入 为什么会存在临界区这中机制呢?是为多线程同时访问全局变量而引入的.也就是上一篇帖子的末尾流出的问题程序的解决办法. 看懂了上面的,那么我们再罗嗦总结一下: 1.多线程访问全局变量时,存在线程 ...

随机推荐

  1. 【转】有的共享软件赚了一百万美元,而为什么你没有?&&我的软件推广成功之路

    有的共享软件赚了一百万美元,而为什么你没有? 转自:http://blog.csdn.net/wangjiwei2010/article/details/1267044 译:DreamGoal 原作: ...

  2. 对于makefile传递参数的一些问题

    makefile变量说明: 1.总控Makefile中使用“-e”参数覆盖下一层Makefile中的变量. 2.父级Makefile向子级Makefile传送变量方式:export <varia ...

  3. zk 10之:Curator之三:服务的注册及发现

    Service Discovery 我们通常在调用服务的时候,需要知道服务的地址,端口,或者其他一些信息,通常情况下,我们是把他们写到程序里面,但是随着服务越来越多,维护起来也越来越费劲,更重要的是, ...

  4. 解决Response输出时乱码

    Response ServletResponse – 通用的response提供了一个响应应该具有的最基本的属性和方法 | |- HttpServletResponse – 在ServletRespo ...

  5. Python中datetime的使用和常用时间处理

    datetime在python中比较常用,主要用来处理时间日期,使用前先倒入datetime模块.下面总结下本人想到的几个常用功能. 1.当前时间: >>> print dateti ...

  6. 阿里云 centos7.2 云安装mysql

    [root@iZ28gvqe4biZ ~]# rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm获取h ...

  7. JDK的windows和Linux版本之下载

    简单说下,Eclipse需要Jdk,MyEclipse有自带的Jdk,除非是版本要求 http://www.oracle.com/technetwork/java/javase/downloads/i ...

  8. 利用oracle session context 向oracle传值

    有时候,我们在执行数据库请求时,需要向数据库传一些应用程序的上下文信息,比如当前应用的用户.举个场景,我们要通过触发器记录对某些关键表的修改日志,日志包括修改的表,字段,字段的值,修改的时间,当然非常 ...

  9. 有两种分别用<bgsound>和<embed></embed>标签,当用<embed>插入背景音乐时可以设置宽度和高度为0,隐藏播放器。

     <bgsound>: <bgsound> 是用来插入背景音乐,但只适用于 ie,其参数设定不多.如下 <bgsound src="your.mid" ...

  10. ue4 官网IK流程记录

    基本流程 角色蓝图构造 角色蓝图 角色蓝图中新建的函数IK Foot Trace AnimGraph事件 这里注意下Make Vector时把z方向的偏移量设置到了X上 猜测原因是效应器的x方向跟世界 ...