汇编语言基础及编译原理
二进制基础
程序的编译 汇编与链接
- 从c语言到可执行程序
源代码.c
编译
汇编代码.s
汇编
目标文件.o
链接(静态库直接拷贝,动态库运行时通过动态链接方式加载)
可执行文件(p)
x86机器指令入门
栈
一种先进后出的数据结构
被用于保存函数的局部(保存局部变量和返回地址)
栈往低地址增长
esp栈顶指针
push 入栈
pop 出栈
- 基础指令
mov 寻址
add 加操作
sub 减操作
lea 加载有效地址
inc 加一
dec 减一
imul 乘法
idiv 除法
and or xor 与 或 异或
not neg 非
shl shr 左右移 - jmp
j[condition]
cmp 比较
call ret 函数调用/返回
Intel 与 AT&T
左右相反
AT&T中$表立即数
%为地址
intel为[]
AT&T为()
调用约定
调用约定约定了函数之间如何传参 如何传返回值
- 调用者负责清理栈上参数(Caller Clean-up)
cdecl
optlink - 被调用者负责清理栈上参数(Callee Clean-up)
stdcall
fastcall
主要是操作栈(64位寄存器中如果传参少可以直接用寄存器传参)
eax保存返回值
ebp保存栈顶指针