1. 可执行文件


1.1 可执行文件:状态机的描述

操作系统 “为程序 (状态机) 提供执行环境”

可执行文件是一个描述了状态机的初始状态 + 迁移的数据结构

<aside> 📖 寄存器

大部分由 ABI 规定,操作系统负责设置

例如初始的 PC

</aside>

<aside> 📖 地址空间

二进制文件 + ABI 共同决定

例如 argv 和 envp (和其他信息) 的存储

</aside>

其他有用的信息 (例如便于调试和 core dump 的信息)

1.2 是谁决定了一个文件能不能执行?

操作系统代码 (execve) 决定的。

<aside> 📖 例子:操作系统上的可执行文件

需要满足若干条件

RTFM man 2 execve

Shebang (Unix) - Wikipedia

2. 解析可执行文件


Binutils - GNU Project - Free Software Foundation

2.1 调试信息

将一个 assembly (机器) 状态映射到 “C 世界” 状态的函数