PE文件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/swjtu100/article/details/49928689

0x00 PE文件格式

  • PE文件格式是可执行文件的数据格式(.dll、.exe)
    这里写图片描述

    1) .text:由编译器产生,存放二进制的机器指令,是反汇编和调试的主要对象
    2) .data:初始化的数据块,如宏定义,全局变量等
    3) .idata:使用DLL等外来函数与文件的信息,即输入表
    4) .rsrc:存放程序的全部资源,如图标、菜单、位图等

0x01 虚拟内存及地址转换

  • 物理内存:进入windows内核级别ring0才能看到
    虚拟内存:调试器中看到的内存地址;区别于OS中的虚拟内存

  • 1) 文件偏移地址(File Offest):数据在PE文件中的地址,即文件在磁盘上存放时相对于文件开头的偏移,在静态反汇编工具看到
    2) 装载基址(Image Base): PE文件被载入内存后的首地址,exe文件默认0x00400000,dll文件默认0x10000000。可通过修改编译选项更改。
    3) 虚拟地址VA(Virtual Address): PE文件中的数据映射到内存后的地址
    4) 相对虚拟地址RVA(Relative VA):RVA=VA-Image Base,即虚拟地址相对于映射基址的偏移

  • 相对区段偏移(Relative Section Offset):数据相对所在区段首地址的偏移。
    Relative Section Offset = RVA – VOffset = File Offset - ROffset

  • 文件偏移(File Offset) = ROffset + Relative Section Offset
    = ROffset + RVA – VOffset
    = ROffset + VA – Image Base - VOffset

  • PE文件存储在磁盘上时,以0x200字节为基本单位来组织数据。PE文件被映射到内存中时,以0x1000字节为基本单位来组织数据。

  • eg:若某数据的文件偏移地址(FileOffset)是0x420,求VA.

    用LordPE打开一个.exe文件
    这里写图片描述
    VOffset:各区段的相对偏移地址(RVA),各区段在内存中的首地址偏移
    ROffset:各区段的文件偏移地址,即各区段在物理磁盘上的首地址偏移

    .txt的ROffse = 0x400 ==>>>该数据在txt段
    这里写图片描述

    VA = File Offset – ROffset + VOffset + Image Base
    = 0x420 – 0x400 + 0x1000 + 0x400000 = 0x401020


——《0day安全》学习笔记

猜你喜欢

转载自blog.csdn.net/swjtu100/article/details/49928689