知行LEARNING HANDBOOK
目录 · 05 怎样读懂可执行文件
学习手册/系统与程序
CHAPTER 058 分钟

怎样读懂可执行文件

以 macOS 的 Mach-O 为例,从文件身份、结构到入口点进行有证据的检查。

读完这一章,你会理解

  1. 形成二进制检查顺序
  2. 理解段、节和加载命令
  3. 避免把十六进制输出当成完整解释

先确认文件身份

分析之前先回答:它是什么格式、面向什么架构、是否包含调试信息。file 能快速给出身份;十六进制查看适合确认文件头方向,但不适合独自承担结构解释。

file hello
xxd hello | head

再使用结构化工具读取元数据

Mach-O 通过加载命令描述段、动态库和入口等信息。otool 可以按结构展示这些命令,nm 可以查看符号,比在原始字节中人工猜测可靠得多。

otool -l hello
nm -nm hello

始终标明你使用的坐标

文件偏移描述内容在磁盘文件中的位置,虚拟地址描述加载后的地址空间,运行地址还可能受到地址随机化影响。结论中如果不标明坐标,很容易出现看似精确但实际混淆的地址。