att与intel风格对照实例
估计很多朋友都和我一样,多年来习惯intel的汇编风格。可是难免遇到风格炯异的att代码。怎么办?顶着上吧!
怎么上?个人觉得有intel汇编基础的朋友不必循常规专门去学习att,去查att手册。用gdb使用两种风格反汇编同一段代码,对照一看就能明白其中的差异。
gdb中有两个命令用于查询和切换反汇编的显示风格
查询当前反汇编格式:show disassembly-flavor
设置反汇编格式为intel(att):set disassembly-flavor intel(att)
下面实例一段代码对照两种风格
att intel
push %ebp push ebp ;att寄存器名前加%
mov %esp,%ebp mov ebp,esp ;源操作数与目的操作数顺序与intel相反
sub %0x68,%esp sub esp,0x68 ;分配0x68字节的局部变量空间
;下面是带偏移地址的寄存器间接寻址,[]变(),偏移写在括号外面。
;偏移可以为负。比如 mov -0x10(%ebp),%eax 相当于 mov eax,DWORD PTR[ebp-10]
mov 0x10(%ebp),%eax mov eax,DWORD PTR [ebp+0x10]
mov %eax,-0x48(%ebp) mov DWORD PTR [ebp-0x48],eax ;将参数赋值给局部变量
...
;att里的l,w,b用来表达操作属性的限定符,l是长字节(4字节), w是双字节,b是单字节.
;加在命令的后边,相当于intel中的dword ptr,word ptr,byte ptr
;att里立即数前要加$,如下面的$0x0
movl $0x0,-0x28(%ebp) mov DWORD PTR [ebp-0x28],0x0
...
call 0x406c4c call 0x406c4c ;不变
...
leave leave ;不变
ret ret ;不变
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库