Chapter 3 - Reverse
程序与可执行文件
高级语言的编译过程
编译执行 / 解释执行
ELF
ELF (Executable and Linkable Format) 是 Linux 系统下的用户态可执行文件
可以通过命令行工具静态检视 ELF 文件
file |
ELF 的编译与链接
Take C for example
编译: from source code (.c) to .o
链接: from .o to executable file (.elf)
预处理
gcc/clang -E hello.c -o hello.c.i |
- 头文件包含
- 宏展开 & 替换
编译
gcc -S hello.c -o hello.s |
-S: Compile only, do not assemble or link
-Ox: 优化等级
-g: 启用调试
…
编译前端
生成 clang AST (抽象语法树) |
编译后端
as hello.s -o hello.o |
hello.c --(gcc/clang)–> hello.s --(as/llvm-mc)–> hello.o