当前位置: 首页 > news >正文

汇编语言全接触-53.PE教程4 Optional Header

本课我们将要研究 PE header 的 file header(文件头)部分。

至此,我们已经学到了哪些东东,先简要回顾一下:

DOS MZ header 又命名为 IMAGE_DOS_HEADER.。其中只有两个域比较重要: e_magic 包含字符串"MZ",e_lfanew 包含PE header在文件中的偏移量。

比较e_magic 是否为IMAGE_DOS_SIGNATURE以验证是否是有效的DOS header。比对符合则认为文件拥有一个有效的DOS header。

为了定位PE header,移动文件指针到e_lfanew所指向的偏移。

PE header的第一个双字包含字符串"PE\0\0"。该双字与IMAGE_NT_SIGNATURE比对,符合则认为PE header有效。

本课我们继续探讨关于 PE header 的知识。 PE header 的正式命名是 IMAGE_NT_HEADERS。再来回忆一下这个结构。

IMAGE_NT_HEADERS STRUCT

Signature dd ?

FileHeader IMAGE_FILE_HEADER <>

OptionalHeader IMAGE_OPTIONAL_HEADER32 <>

IMAGE_NT_HEADERS ENDS

Signature PE标记,值为50h, 45h, 00h, 00h(PE\0\0)。

FileHeader 该结构域包含了关于PE文件物理分布的一般信息。

OptionalHeader 该结构域包含了关于PE文件逻辑分布的信息。

最有趣的东东在 OptionalHeader 里。不过,FileHeader 里的一些域也很重要。本课我们将学习FileHeader,下一课研究OptionalHeader。

IMAGE_FILE_HEADER STRUCT

Machine WORD ?

NumberOfSections WORD ?

TimeDateStamp dd ?

PointerToSymbolTable dd ?

NumberOfSymbols dd ?

SizeOfOptionalHeader WORD ?

Characteristics WORD ?

IMAGE_FILE_HEADER ENDS

Field name

Meanings

Machine

该文件运行所要求的CPU。对于Intel平台,该值是IMAGE_FILE_MACHINE_I386 (14Ch)。我们尝试了LUEVELSMEYER的pe.txt声明的14Dh和14Eh,但Windows不能正确执行。看起来,除了禁止程序执行之外,本域对我们来说用处不大。

NumberOfSections

文件的节数目。如果我们要在文件中增加或删除一个节,就需要修改这个值。

TimeDateStamp

文件创建日期和时间。我们不感兴趣。

PointerToSymbolTable

用于调试。

NumberOfSymbols

用于调试。

SizeOfOptionalHeader

指示紧随本结构之后的 OptionalHeader 结构大小,必须为有效值。

Characteristics

关于文件信息的标记,比如文件是exe还是dll。

简言之,只有三个域对我们有一些用: Machine, NumberOfSections 和 Characteristics。通常不会改变 Machine 和Characteristics 的值,但如果要遍历节表就得使用 NumberOfSections。

为了更好阐述 NumberOfSections 的用处,这里简要介绍一下节表。

节表是一个结构数组,每个结构包含一个节的信息。因此若有3个节,数组就有3个成员。我们需要NumberOfSections值来了解该数组中到底有几个成员。 也许您会想检测结构中的全0成员起到同样效果。Windows确实采用了这种方法。为了证明这一点,可以增加NumberOfSections的值,Windows仍然可以正常执行文件。据我们的观察,Windows读取NumberOfSections的值然后检查节表里的每个结构,如果找到一个全0结构就结束搜索,否则一直处理完NumberOfSections指定数目的结构。 为什么我们不能忽略NumberOfSections的值? 有几个原因。PE说明中没有指定节表必须以全0结构结束。Thus there may be a situation where the last array member is contiguous to the first section, without empty space at all. Another reason has to do with bound imports. The new-style binding puts the information immediately following the section table's last structure array member. 因此您仍然需要NumberOfSections。

http://www.jsqmd.com/news/152843/

相关文章:

  • YOLO在工业分拣机器人中的应用:高速GPU检测系统
  • 揭秘autodl环境搭建难点:如何30分钟成功运行Open-AutoGLM?
  • Open-AutoGLM下载失败?常见问题与解决方案,一篇搞定
  • LLMLingua技术深度解析:如何用20倍压缩比重构大模型交互范式
  • WSL环境中AMD ROCm完整安装与优化:从零到精通的终极指南
  • YOLO在港口集装箱识别中的实践:基于GPU的全天候检测
  • YOLO模型部署到Kubernetes:自动化管理GPU节点集群
  • 极简Python自动化解决方案:10行代码重塑你的工作效率
  • 5分钟搞定Office部署:PowerShell自动化终极指南
  • Quake III Arena技术架构深度解析与开发实践指南
  • STM32CubeMX中文支持:STM32F1系列项目应用详解
  • ST7735色彩处理机制深入浅出解释
  • 告别视频缓存烦恼:bilidown让你的B站收藏永不丢失
  • Cemu音频优化完整指南:告别卡顿爆音,享受完美游戏音效
  • YOLO目标检测模型打包:包含GPU依赖的完整交付包
  • InstantID与Blender融合:零训练3D人脸建模的技术革命
  • 微信机器人完整安装指南:3步实现智能自动回复
  • 量化投资实战指南:从数据采集到策略回测的完整流程
  • Windows终端革命:ConEmu终极配置指南与高效工作流实战
  • DBeaver数据导入终极加速指南:3步实现多线程性能飞跃
  • YOLO目标检测项目立项指南:预算中如何估算GPU与Token成本
  • YOLO训练过程中的GPU利用率波动原因及解决方案
  • 终极指南:5分钟快速上手Turing智能屏幕Python系统监控!
  • 终极指南:FOLib如何重塑你的AI研发供应链管理
  • CopilotForXcode企业级实战部署:高效开发环境构建全流程
  • YOLO模型压缩与量化:在保持精度的同时降低GPU资源占用
  • Instagram私有API突破性解决方案:高效自动化管理你的社交帝国
  • YOLO模型微调技巧:如何用最少Token获得最大精度提升
  • Waveforms:终极音频可视化解决方案,快速创建交互式波形图
  • 【autodl部署Open-AutoGLM终极指南】:手把手教你7步完成高效AI模型部署