• 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)- 节偏移
    • 节偏移 = 文件偏移地址- 虚拟内存地址
  • 相关阅读:
    Android实现多个词汇连续输入的提示
    android 中使用AutoCompleteTextView 可以实现自动提示功能
    关于android中搜索功能的实现
    重复弹出Toast 解决方案
    Android显示不重复通知的Notification
    个人项目经历
    使用Google 官方的控件SwipeRefreshLayout实现下拉刷新功能
    安卓左滑实现返回上一个页面
    初学hadoop
    浅谈nodejs和php
  • 原文地址:https://www.cnblogs.com/l0nmar/p/12553848.html
Copyright © 2020-2023  润新知