PE文件简单介绍
PE(Portable Execute)文件是WIN32下可运行文件遵循的数据格式,也是反汇编调试不可缺少的文件,常见的pe文件有.exe和.dll文件。本文主要介绍pe文件的结构和虚拟内存地址转换到文件地址的方法。
pe文件的基本结构
主要的pe文件主要包含下面部分:例如以下图
- .text节:由编译器产生,村反击本的二进制机器码,我们调试非常烦会变得而主要对象。
- .data节:数据块,宏定义,全局变量,静态变量等。
- .idata节:可运行文件使用的动态链接库和外来函数信息与文件信息等。
- .rsrc节:承训的资源,图标,菜单等
几个重要概念
上面简介了pe的基本结构,如今结合下图,介绍几个存储地址的基本概念,为后面的地址转换做准备。
- 文件偏移地址:主要指的是文件里内容相对于文件开头的偏移量(a-0)。因此文件地址从开头的0開始依次添加。
- 装载地址(image base):主要指的是程序执行时候装载在内存中时候,非配给该文件的首要内存地址(400000),也就是装载地址位置存放的是文件地址为0处的文件。
- 虚拟内存地址(virtual address,VA):文件被装入内存后的内存地址(b)。
- 相对虚拟地址(relative virtual address,RVA):文件被装入到内存后的地址与装载基址的距离(b-400000),即相对于装载基址的偏移量(内存地址VA-装载基址IMAGE BASE)。
注意:文件偏移地址≠相对虚拟地址,主要原因是:文件偏移地址是相对于在磁盘存放时候的偏移量,而磁盘以0×200(0.5k)为单位,每一个节占用的大小为0×200的倍数(多拆少补0×00),而相对虚拟地址是相对于内存的偏移量,而内存以0×1000(1K)为单位,每一个节占用的大小为0×1000的倍数(多拆少补0×00)。由此产生每一个节的差量称为为节偏移(.text节的节偏移为(d-4000)-(c-0),即为填充部分),映射方式例如以下图:
文件偏移地址与虚拟内存地址的转换
因此如今我们能够通过IDA得到虚拟内存地址(VA)为b,通过LordPE能够得出节偏移(d-c),然后就可以得出a的地址为(a=b-400000-[(d-400000)-(c-0)]),总结成公式即为:
文件偏移地址=VA-Image Base-节偏移
本文出自个人博客:PE文件简单介绍
以上内容基于阅读《0day安全:软件漏洞分析》后个人理解
PE文件简单介绍的更多相关文章
- Core文件简单介绍及生成设置方法
Core文件简单介绍及生成设置方法 Core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信息,主用用于对程序进行调试.当程序崩溃时便会产生core文件,其实准确的应该说是core dump 文 ...
- CocoaPods常用终端命令及Profile文件简单介绍
Pod常用终端命令 pod init 创建pod文件 pod install 开始安装第三方框架,如果网上有更新,会安装最新的 pod install --verbose--no-repo-updat ...
- Java Web中web.xml文件简单介绍
参考博客: https://www.cnblogs.com/Y-oung/p/8401549.html 1.XML 声明和根元素 <?xml version="1.0" en ...
- Maven Pom.xml文件简单介绍
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- pom.xml(Project Object Model) 文件简单介绍
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...
- 【浅墨著作】《OpenCV3编程入门》内容简单介绍&勘误&配套源码下载
经过近一年的沉淀和总结,<OpenCV3编程入门>一书最终和大家见面了. 近期有为数不少的小伙伴们发邮件给浅墨建议最好在博客里面贴出这本书的文件夹,方便大家更好的了解这本书的内容.事实上近 ...
- 【黑客免杀攻防】读书笔记6 - PE文件知识在免杀中的应用
0x1 PE文件与免杀思路 基于PE文件结构知识的免杀技术主要用于对抗启发式扫描. 通过修改PE文件中的一些关键点来达到欺骗反病毒软件的目的. 修改区段名 1.1 移动PE文件头位置免杀 工具:PeC ...
- PHP 关于文件操作的简单介绍
文件操作一直是Web程序员头疼的地方,而文件操作在CMS这样的系统中又是必须的.如今,PHP文件操作的函数内容已经非常强大,文件这部分也是学习PHP非常重要的一部分,希望大家不要忽略.这篇文章会简单介 ...
- [QT]简单介绍一下 *.pro、*.pri、*.prf、*.prl等四种文件
转自:http://blog.csdn.net/dbzhang800/article/details/6348432 简单介绍一下 *.pro.*.pri.*.prf.*.prl等四种文件:干嘛用的, ...
随机推荐
- BZOJ 1669: [Usaco2006 Oct]Hungry Cows饥饿的奶牛( LIS )
裸的LIS ----------------------------------------------------------------- #include<cstdio> #incl ...
- 个人自建网店(WordPress WooCommerce on SAE)集成支付宝支付
插件: Alipay For WooCommerce 到支付宝账户的商家服务提出申请: https://b.alipay.com/order/serviceIndex.htm 在"在线签约- ...
- 基于RSA securID的Radius二次验证java实现(PAP验证方式)
基于rsa SecurID的二次验证.RSA server自身可以作为Radius服务器,RSA也可以和其他的软件集合,使用其他的server作为Radius服务器. radius的验证的一般流程如下 ...
- HBase性能测试
hbase org.apache.hadoop.hbase.PerformanceEvaluationUsage: java org.apache.hadoop.hbase.PerformanceEv ...
- [置顶] High Performance Canvas Game for Android
Rule #0 为移动平台进行优化 为移动平台进行优化是十分重要的,因为移动平台的性能大概只有桌面平台的1/10左右(*1),它通常意味着: 更慢的CPU速度,这意味着不经过优化的JavaScript ...
- 51cto运维培训课程
线路图: Linux运维架构师 基础提高篇(120课时) 基础提高篇(240课时) Linux系统基础及系统管理 Shell编程入门及进阶 linux安全管理和企业级安全防范策略 企业级集群/存储专题 ...
- 一个简单的基于canvas小游戏
GDOI2016是我的退役战,不知道是题目画风不对,还是我自身的问题. 不过没关系啦,反正已经进过一次队OI生涯就没有什么遗憾的了. 这几天尝试着去做了个所谓的html5小游戏,略显简陋,但还是写个总 ...
- X Window System介绍
1.概述 X Window System是1984年由麻省理工学院(MIT)和DEC公司共同开发研究的,是执行在UNIX系统上的视窗系统.严格地说,X Window System并非一个软件, ...
- 查看一个int数组里边的每个数字出现过几次
public void aa() { int[] a = { 1, 2, 3, 4, 5, 4, 3, 2, 1 }; Hashtable ht = new Hashtable(); for (int ...
- 【Hibernate】Remember that ordinal parameters are 1-based!
此错误的官方解释:1.当hql中不需要参数,而传递了参数导致,2.set参数时没有从0开始. 但此问题不属这两种. 检查导入的libraries无错误. 最后在网络搜索到:http://qihaihu ...