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文件简单介绍的更多相关文章

  1. Core文件简单介绍及生成设置方法

    Core文件简单介绍及生成设置方法 Core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信息,主用用于对程序进行调试.当程序崩溃时便会产生core文件,其实准确的应该说是core dump 文 ...

  2. CocoaPods常用终端命令及Profile文件简单介绍

    Pod常用终端命令 pod init 创建pod文件 pod install 开始安装第三方框架,如果网上有更新,会安装最新的 pod install --verbose--no-repo-updat ...

  3. Java Web中web.xml文件简单介绍

    参考博客: https://www.cnblogs.com/Y-oung/p/8401549.html 1.XML 声明和根元素 <?xml version="1.0" en ...

  4. Maven Pom.xml文件简单介绍

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  5. pom.xml(Project Object Model) 文件简单介绍

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

  6. 【浅墨著作】《OpenCV3编程入门》内容简单介绍&amp;勘误&amp;配套源码下载

    经过近一年的沉淀和总结,<OpenCV3编程入门>一书最终和大家见面了. 近期有为数不少的小伙伴们发邮件给浅墨建议最好在博客里面贴出这本书的文件夹,方便大家更好的了解这本书的内容.事实上近 ...

  7. 【黑客免杀攻防】读书笔记6 - PE文件知识在免杀中的应用

    0x1 PE文件与免杀思路 基于PE文件结构知识的免杀技术主要用于对抗启发式扫描. 通过修改PE文件中的一些关键点来达到欺骗反病毒软件的目的. 修改区段名 1.1 移动PE文件头位置免杀 工具:PeC ...

  8. PHP 关于文件操作的简单介绍

    文件操作一直是Web程序员头疼的地方,而文件操作在CMS这样的系统中又是必须的.如今,PHP文件操作的函数内容已经非常强大,文件这部分也是学习PHP非常重要的一部分,希望大家不要忽略.这篇文章会简单介 ...

  9. [QT]简单介绍一下 *.pro、*.pri、*.prf、*.prl等四种文件

    转自:http://blog.csdn.net/dbzhang800/article/details/6348432 简单介绍一下 *.pro.*.pri.*.prf.*.prl等四种文件:干嘛用的, ...

随机推荐

  1. GNU scientific library

    GNU scientific library 是一个强大的C,C++数学库.它涉及的面很广,并且代码效率高,接口丰富.正好最近做的一个项目中用到多元高斯分布,就找到了这个库. GNU scientif ...

  2. Python之路:Python 基础(二)

    一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. if 1==1: name = 'lenliu' print name 下面的结论对吗?(对) 外层变量,可以被 ...

  3. Objective-c 截取子字符串

    NSString类中提供了这样三个方法用于获取子字符串: – substringFromIndex: – substringWithRange: – substringToIndex: 它们该怎么使用 ...

  4. SQL Identity自增列清零方法

    1.使用DBCC控制台命令: dbcc checkident(表名,RESEED,0) 2.truncate table 也可将当前标识值清零 但当有外键等约束时,无法truncate表 可以先禁用外 ...

  5. Amazon Hiring Campus 2013 - Final 6

    Let's assume that there is a simple market for beans. Every day there is a published bean price in t ...

  6. 如何优化你的JS脚本来减少reflow/repaint?

    如何优化你的脚本来减少reflow/repaint?1. 避免在document上直接进行频繁的DOM操作,如果确实需要可以采用off-document的方式进行,具体的方法包括但不完全包括以下几种: ...

  7. 汇总:Linux下10款即时通讯客户端,skype

    aMSN 是一款功能强大的MSN(WLM)的客户端,支持皮肤.插件.系统托盘图标.摄像头.多帐号登录.离线信息等. Pidgin 不用说了,是GNOME下的IM客户端,支持AIM, Google Ta ...

  8. 关于异或(Xor)的一点笔记

    因为博弈论里,尤其实在求sg函数时,经常会用到异或运算,所以我就把网上搜到的一些相关知识和自己的一些理解记下来. 如果出现差错,还请指出,谢谢! 异或:可以简称Xor,可以用数学符号⊕表示,计算机就一 ...

  9. Debian下Apache配置多域名访问

    请见Github博客:http://wuxichen.github.io/Myblog/php/2014/10/10/DebianApacheSetting.html

  10. codeblocks快捷键及设置

    ==日常编辑== • 按住Ctrl滚滚轮,代码的字体会随你心意变大变小.• 在编辑区按住右键可拖动代码,省去拉(尤其是横向)滚动条之麻烦:相关设置:Mouse Drag Scrolling.• Ctr ...