汇编语言 | AT&T汇编语言

这两天的pwn题环境都是在Linux中,采用的汇编语言是 AT&T 格式。之前学习的是Intel格式的8086汇编,今天学习了下AT&T汇编语言。

1、汇编指令

基于 x86 架构 的处理器所使用的汇编指令一般有两种格式:

  • Intel 汇编:DOS(8086处理器)、Windows
  • AT&T汇编:Linux, Unix, Mac OS,


2、AT&T与Intel 汇编语法

操作Intel格式AT&T格式
寄存器命名push eaxpushl %eax
常数\立即操作数push 50pushl $50
操作数顺序操作数排列是从源(右)到目的(左),如add eax(目的),edx(源)(eax=eax+edx)操作数排列是从源(左)到目的(右),如add %edx(源),%eax(目的)(%eax=%eax+%edx)
操作数的字长后缀b、w、l分别表示操作数为字节(byte,8 比特)、字(word,16 比特)和长字(long,32比特)用前缀byte ptr 和 word ptr表示 
绝对转移指令jmpjmp eax操作数前要加上'*'作为前缀,如jmp *eax
调用指令callcall eax操作数前要加上'*'作为前缀,如call *eax
内存引用section:[base+index*scale+displacement]section:displacement(base,index,scale)
远程转移指令jmp far section:offsetljump $section, $offset
远程子调用指令lcall $section, $offsetcall far section:offset
内存操作数mov ebx, [ebp - 3]movl -3(%ebp), %ebx

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3、函数的调用流程(内存)

  1. push 参数
  2. push 函数的返回地址
  3. push bp (保留bp之前的值,方便以后恢复)
  4. mov bp, sp (保留sp之前的值,方便以后恢复)
  5. sub sp,空间大小 (分配空间给局部变量)
  6. 保护可能要用到的寄存器
  7. 使用CC(int 3)填充局部变量的空间
  8. --------执行业务逻辑--------
  9. 恢复寄存器之前的值
  10. mov sp, bp (恢复sp之前的值)
  11. pop bp (恢复bp之前的值)
  12. ret (将函数的返回地址出栈,执行下一条指令)
  13. 恢复栈平衡 (add sp,参数所占的空间)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值