1. .C/.cpp 预编译 编译 汇编 链接 .exe
.c/.cpp
预编译.i 编译.s 汇编.o 链接
1.#define 1.词法分析 指令代码翻译成二进制 1.合并段和符号表
2/#include 2.语法分析 2.符号解析
3.#if #endif #elif 3.语义分析 3.分配地址和空间
4.删除注释 4.代码优化 4.符号的重定位
5.添加行号
6.保留#pragma
Linux ELF
Window PE
强弱符号
强符号:已经初始化的全局变量
弱符号:未初始化的全局变量
强弱符号的规则
1.两强 重定义
2.一强一弱 选强
3.两弱
inter x86 ==> Windows
AT&T ==>Linux
mov,dword ptr[ebp - 4],0ah; add eax,0ah ==> eax+=0a
lea,eax,[ebp - 4]; sub eax.0ah ==> eax-=0a
push 0ah call 压入下一行指令地址 2.jmp 被调用方函数
pop eax ==> eax = pop(); ret
eax ebx ecx edx
ebp 栈底指针寄存器
esp 栈顶指针寄存器
PC 下一行指令寄存器