zoukankan      html  css  js  c++  java
  • 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安全:软件漏洞分析》后个人理解

  • 相关阅读:
    word count
    第三周作业:Visual Studio 2013
    第三周作业:读程序
    只有动手才能发现问题
    软件工程
    final个人阅读作业
    个人阅读作业7
    第一次个人项目修改
    结对编程项目总结(王开207, 唐彬170)
    个人博客作业3
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4291508.html
Copyright © 2011-2022 走看看