PE ELF

Posted by chinaljr on June 1, 2018

ELF executable linkable format 文件格式

学习网站

类型

  • 可重定位文件.o
  • 可执行文件 bin bash
  • 共享目标文件 .so
  • 核心转储格式文件 core dump

组成

  • ELF header
  • section header table
  • String tables
  • Symbol tables

段表

就是目录,存储位置有elf header 中 e_shoff决定

段表字符串表

保存ELF文件中 段名字符串内容

符号表

函数名和变量名就是符号名

PE Portable Executable

win 可执行文件格式

学习网址

基本格式

tp

PE文件头

  • IMAGE_NT_HEADER
    • Machine 运行平台 CPU类型
    • NumberOfSections 节表数目
    • TimeDateStamp 创建日期 GMT秒
    • PointerToSymbolTable
    • NumberOfSymbols
    • SizeOfOptionalHeader optional的大小
    • Characteristics 文件属性exe or dll etc
  • IMAGE_OPTIONAL_HEADER32
    • Magic
    • MajorLinkerVersion 链接程序的主版本号
    • MinorLinkerVersion 链接程序的次版本号
    • SizeOfCode 所有含代码的节的大小
    • SizeOfInitializedData 所有含已初始化数据的节的总大小
    • SizeOfUninitializedData 所有含未初始化数据的节的大小
    • AddressOfEntryPoint 程序执行入口RVA 虚拟地址偏移
    • BaseOfCode 代码区块起始RVA
    • BaseOfData 数据区块起始RVA
    • ImageBase 程序首选装载地址 不需要重定位 加载速度快
    • SectionAlignment 内存中区块的对齐大小
    • FileAlignment 文件中区块的对齐大小
    • MajorOperatingSystemVersion 要求操作系统最低版本的主版本号
    • MinorOperatingSystemVersion
    • MajorImageVersion 可运行于操作系统的主版本号
    • MinorImageVersion
    • MajorSubsystemVersion 子系统
    • MinorSubsystemVersion 子系统
    • Win32VersionValue
    • SizeOfImage 装入内存后的总尺寸
    • SizeOfHeaders 头 + 区块表 大小
    • Checksum
    • Subsystem 可以打开控制台?
    • DllCharacteristic Dll函数何时被调用
    • SizeOfStackReserve 初始化时的栈大小
    • SizeOfHeapReserve 初始化时保留的堆大小
    • SizeofHeapCommit 初始化时实际提交的堆大小
    • LoaderFlags 调试
    • NumberOfRvaAndSizes 数据目录的项数
    • IMAGE_DATA_DIRECTORY 数据目录表
      • tp

节表和节

  • 装载过程,建立虚拟地址和PE文件之间的映射关系
  • 从不同节映射过来的内存页的属性和节有关
  • 节表IMAGE_SECTION_HEADER
    • Name 区块名 仅仅是个标记
    • Virtual Size 大小 根据SectionAlignment 对齐
    • Virtual Address 装载到内存中的偏移地址
    • PointerToRawData 磁盘位置,偏移量
    • SizeOfRawData 按照 FileAlignment对齐
    • Characteristic 区块属性

导入表

完成动态链接的功能

  • PE文件中的导入表
    • 一个表项代表 一个DLL
    • Name 存的是 名字 的 相对地址 间接访问名字
    • OriginalFirstThunk 是导入的函数数组 导入方式不太一样,编号方式,名称方式
  • 内存中的导入表
    • FirstThunk 存的函数入口地址 Import Address Table

导出表 dll 告诉系统的接口

资源表

  • Windows 将程序的各种界面定义为资源,包括加速键(Accelerator)、位图(Bitmap)、光标(Cursor)、对话框(Dialog Box)、图标(Icon)、菜单(Menu)、串表(String Table)、工具栏(Toolbar)和版本信息(Version Information)等
  • 分层目录,类似于树状文件夹管理

重定位表

DLL加载时被占用重定位

  • 需要三个数据
    • 需要修改的机器码地址
    • 模块建议装入地址
    • 模块实际装入地址
  • 实质上PE文件重定位表保存的是一堆需要修正的代码地址
    • 类似页表管理
    • 页起始指针 + 重定位项数 + 偏移
    • 低12位表示偏移 高四位 表示重定位项种类