zoukankan      html  css  js  c++  java
  • 0day笔记(1)PE文件格式与虚拟文件内存的映射

    PE文件格式

    • PE 文件格式把可执行文件分成若干个数据节(section),不同的资源被存放在不同的节中。 一个典型的 PE 文件中包含的节如下:
      • .text 存放着二进制的机器代码
      • .data 初始化的数据块,如宏定义、全局变量、静态变量等。
      • .idata 可执行文件所使用的动态链接库等外来函数与文件的信息。
      • .rsrc 存放程序的资源,如图标、菜单等。
    • 除此以外,还可能出现的节包括“.reloc”、“.edata”、“.tls”、“.rdata”等。
    • 某些加壳处理会影响节信息

    PE 文件与虚拟内存之间的映射

    书中摘取

    • 文件偏移地址: 文件中的数据,二进制代码等相对于文件头部的偏移地址
    • 装载基址:文件加载进内存时的文件头部的地址
      • 默认情况下,EXE 文件在内存中的基地址是 0x00400000,DLL 文件是 0x10000000。这些位置可以通过修改编译选项更改
    • 虚拟内存地址: PE中的指令数据等加载进内存后的地址
    • 相对虚拟地址: 相对虚拟地址是内存地址相对于映射基址的偏移量。
      • 虚拟内存地址 != 装载基址+文件偏移地址
      • 相对虚拟地址 = 虚拟内存地址 - 装载基址
      • 造成相对相对虚拟地址与文件偏移地址的差异的原因:
        • PE 文件中的数据按照磁盘数据标准存放,以 0x200 字节为基本单位进行组织。
        • 当代码装入内存后,将按照内存数据标准存放,并以 0x1000 字节为基本单位进行组织
        • 不够一个基本单位填充 0x00 ,永远是基本单位的整数倍
          在这里插入图片描述
          使用lord PE可查看修改内存关系
    • 文件偏移地址 = 虚拟内存地址(VA)- 装载基址(Image Base)- 节偏移
    • 节偏移 = 文件偏移地址- 虚拟内存地址
  • 相关阅读:
    401. Binary Watch
    46. Permutations
    61. Rotate List
    142. Linked List Cycle II
    86. Partition List
    234. Palindrome Linked List
    19. Remove Nth Node From End of List
    141. Linked List Cycle
    524. Longest Word in Dictionary through Deleting
    android ListView详解
  • 原文地址:https://www.cnblogs.com/l0nmar/p/12553848.html
Copyright © 2011-2022 走看看