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头解析_手动的更多相关文章
-
零基础逆向工程21_PE结构05_数据目录表_导出表
数据目录 1.我们所了解的PE分为头和节,在每个节中,都包含了我们写的一些代码和数据,但还有一些非常重要 的信息是编译器替我们加到PE文件中的,这些信息可能存在在任何可以利用的地方. 2.这些信息之所 ...
-
零基础逆向工程20_PE结构04_任意节空白区_新增节_扩大节添加代码
向代码节添加代码实现 作者经过一周不断的失败,再思考以及无数次调试终于实现. 思路:八个步骤 1. 文件拷到文件缓冲区(FileBuffer) //图示见(零基础逆向工程18之PE加载过程) 2. 文 ...
-
零基础逆向工程22_PE结构06_导入表
导入表结构 typedef struct _IMAGE_IMPORT_DESCRIPTOR { union { DWORD Characteristics; DWORD OriginalFirstTh ...
-
零基础逆向工程16_C语言10_宏定义_头文件_内存分配_文件读写
#define 无参数的宏定义的一般形式为:#define 标识符 字符序列 如:#define TRUE 1 注意事项: 1.之作字符序列的替换工作,不作任何语法的检查 2.如果宏定义不当,错误要到 ...
-
零基础逆向工程23_PE结构07_重定位表_IAT表(待补充)
重定位表 待补充 IAT表 待补充
-
零基础逆向工程19_PE结构03_代码节空白区添加代码_shellcode
1.获取MessageBox地址,构造ShellCode代码 三种获取方法,参考文章末的一篇帖子. E8 E9计算公式 call 的硬编码:E8 00 00 00 00 jmp 的硬编码:E9 00 ...
-
零基础逆向工程18_PE结构02_联合体_节表_PE加载过程
联合体 特点 1.联合体的成员是共享内存空间的 2.联合体的内存空间大小是联合体成员中对内存空间大小要求最大的空间大小 3.联合体最多只有一个成员有效 节表数据结构说明 PE 加载 过程 FileBu ...
-
零基础逆向工程24_C++_01_类_this指针_继承本质_多层继承
1 类内的成员函数和普通函数的对比 1.1 主要是从参数传递.压栈顺序.堆栈平衡来总结. 1.参数传递:成员函数多传一个this指针 2.压栈顺序:成员函数会将this指针压栈,在函数调用取出 3.堆 ...
-
零基础逆向工程35_Win32_09_临界区_CRITICAL_SECTION结构
1 引入 为什么会存在临界区这中机制呢?是为多线程同时访问全局变量而引入的.也就是上一篇帖子的末尾流出的问题程序的解决办法. 看懂了上面的,那么我们再罗嗦总结一下: 1.多线程访问全局变量时,存在线程 ...
随机推荐
-
.NET网页打印以及使用打印需要注意的事项(可能会引起VS崩溃的现象、打印预览后关闭功能不管用)
这两天进行给网页添加打印.打印预览.页面设置的功能.遇到了以下几个问题 [1]在网上查找了一些打印方法,一开始还可以用,后来不知道动到了哪里,点击vs中拆分或者切换到另一个设计和源代码显示方式,就会引 ...
-
jqeury datatable
1.自定义列信息 "aoColumnDefs":[ { ...
-
正整数转换成N进制的数组
给定一个正整数,按照N进制转换成数组元素存储 //给定一个整数,把它转换成按照N进制存储的数组 #include <stdio.h> #include <stdlib.h> # ...
-
sql - 选出指定范围的行
Select no=Identity(int,1,1),* Into #temptable From dbo.tName order by fName --利用Identity函数生成记录序号 Sel ...
-
div中实现居中
今天纠结了大半天的居中,把学到的先记录下来,还没完全弄清楚,发现网上原创的技术贴并不算多,大多都是相互转载.(ps.先安利一个大神的帖集,昨天才发现的,内容丰富,语言,呃...很幽默,一般都是图文并茂 ...
-
ssh远程登录linux服务器
ssh远程登录linux服务器 用法: ssh -l user -p port server_ip 或者 ssh -p port user@server_ip 参数: -l 后接要登录的远程系统用户名 ...
-
XStream 用法汇总
XStream是一家Java对象和XML转换工具,很好很强大.它提供了所有的基本型.排列.收集和其他类型的支持,直接转换.因此XML在数据交换经常使用.对象序列化(和Java对象的序列 ...
-
iOS音频格式PCM转G711u(或G711a-law)
请尊重作者劳动成果,如需转载本博客文章请注明出处!谢谢合作! inputData是PCM的实时数据,可以通过转码,获取到最后导出的G711u数据(sendData) NSUInteger datal ...
-
数据库技术丛书:SQL Server 2016 从入门到实战(视频教学版) PDF
1:书籍下载方式: SQL Server2016从入门到实战 PDF 下载 链接:https://pan.baidu.com/s/1sWZjdud4RosPyg8sUBaqsQ 密码:8z7w 学习 ...
-
spark.mllib源代码阅读-优化算法1-Gradient
Spark中定义的损失函数及梯度,在看源代码之前,先回想一下机器学习中定义了哪些损失函数,毕竟梯度求解是为优化求解损失函数服务的. 监督学习问题是在如果空间F中选取模型f作为决策函数.对于给定的输入X ...