PE文件 -- 学习笔记

  • 使用SDK或Visual C++创建PE文件时,EXE默认的ImageBase为00400000,DLL默认10000000。使用DDK创建的SYS文件默认的ImageBase为10000。

  • Windows Vista之后的版本引入了ASLR安全机制,每次运行EXE文件都会被加载到随机地址,增强了系统安全性。

  • VC++中生成的PE文件的重定位节区名为.reloc,删除该节区后文件照常运行。

  • .reloc删除:

  • 首先在 IMAGE_SECTION_HEADER .reloc 处查看该节区头的长度和 .reloc 节区的偏移地址,以及 Virtual Size

  • 然后将 .reloc 的节区头中的值替换为0, .reloc 节区整个删除

  • 删除节区后,修改 IMAGE_FILE_HEADER 中的 Number of Sections 项。

  • 通过 IMAGE_OPTIONAL_HEADER - size of Image 修改映像值大小。

  • 需要减去的值根据之前记录的 Virtual Size 和 IMAGE_OPTIONAL_HEADER - Section Alignment 值扩展后所得。

  • 根据PE文件格式规范,IMAGE_NT_HEADERS的起始位置是“可变的”,由IMAGE_DOS_HEADER中的e_lfanew的值决定。一般拥有如下值(不同构建环境会有不同):

e_lfanew = MZ文件头大小(40) + DOS存根大小(可变:VC++下为A0) = E0
  • IMAGE_FILE_HEADER中的SizeOfOptionalHeader表示IMAGE_OPTIONAL_HEADER结构体的长度。另一层含义是确定节区头(IMAGE_SECTION_HEADER)的起始偏移。

  • 从IMAGE_OPTIONAL_HEADER的起始偏移加上SizeOfOptionalHeader的值的位置开始才是IMAGE_SECTION_HEADER

  • IMAGE_OPTIONAL_HEADER在32位PE32中大小为E0,64位PE32+中的大小为F0

  • Data_Directories中Import_Table为八个字节。前四个字节为导入表的地址(RVA),后四个字节为导入表的大小(SIZE)。如下图:导入表的RVA为271EE

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,168评论 19 139
  • ELF&PE 文件结构分析 说简单点,ELF 对应于UNIX 下的文件,而PE 则是Windows 的可执行文件,...
    刀背藏身阅读 12,634评论 1 27
  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 7,902评论 0 27
  • 我们本单纯相爱 白首不分离 却硬将我们分出阶级 然后 你被捧为国王 我为尘埃 啊 世俗的人儿 虚伪而又真实
    molly橙时光阅读 263评论 2 2
  • 光影构图是比较深入和高级一层的构图,首先恭喜能静下心来读这篇文章的你,代表你的水平已越过初级的有形构图,进入到这无...
    龙飞摄影阅读 3,858评论 1 43