汇编基础

1. 几个重要的寄存器

寄存器
EIPInstruction Pointer,存储CPU要执行的下一条指令,自动加1,程序员不能修改EIP的值,但是可以被CALL、RET、JUMP、conditional JUMP指令修改
EAX累加寄存器,通常存储临时变量值或者函数的返回值
EBX基地址寄存器
EDX数据寄存器
EBP堆栈基地址,指向栈底
ESP堆栈顶指针,指向栈顶

注:寄存器前面加E的是表示32位系统寄存器,不加E的是16位系统寄存器。

2. 寻址方式

movl %eax,%edx      //edx = eax         寄存器寻址
movl $0x123,%edx   //edx = 0x123       立即数寻址
movl 0x123,%edx     //edx = *(int32_t*)0x123    直接寻址
movl (%ebx),%edx        //edx = *(int32_t*)ebx  间接寻址
movl 4(%ebx),%edx       //edx = *(int32_t*)(ebx+4)  移位寻址

**注:**b、w、l、q分别表示8位、16位、32位和64位。

3.基本汇编指令

1.
pushl %edx; 
<==>    
sub $4,%esp;       //由于栈向下增长,所以栈顶指针先减4
movl %eax,(%esp);   //将edx的值存入esp中,括号表示取地址,等同于C中的*

2.
pop %eax
<==>    
movl (%esp),%eax;       //将栈顶元素存入eax
addl $4,%esp;          //栈顶指针加4

3.
call 0x12345;
<==>    
push %eip;              //将当前eip的值压栈
movl $0x12345,%eip;        //eip跳转到0x12345

4.
ret
<==>    
popl %eip

5.
enter
<==>    
pushl %ebp;
movl %esp,%ebp;

6.
leave
movl %ebp,%esp;
popl %ebp;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值