好友
阅读权限10
听众
最后登录1970-1-1
|
使用情况
Windows 工具链通常使用 Intel 语法,Linux(准确地说是 Unix 家族) 工具链通常会使用 AT&T 语法。
比如,Windows 上的 OllyDbg、WinDbg、IDA 等均采用 Intel 记法。Linux 上面的 gdb、objdump、gcc、as 等默认均采用 AT&T 记法。
当然,情况不总是这样子,比如 Linux 上的 edb 便是采用 Intel 记法。另外,gdb、objdump 等 Linux 平台的工具也都可以设置为 Intel 记法。
明显的差异
- 立即操作数、寄存器操作数和绝对地址操作数的表示
- AT&T 记法里 立即操作数 带有前导 $,Intel 记法没有
- AT&T 记法里 寄存器操作数 带有前导 %,Intel 记法没有
- AT&T 记法里 绝对地址操作数(跳转与调用) 带有前导 *,Intel 记法没有
- 源操作数与目的操作数的顺序
- AT&T 记法采用与 Intel 记法相反的源操作数、目的操作数顺序
- 但是 bound、invlpga 和带两个立即操作数的指令(比如 enter)不采用相反的顺序
- 内存操作数大小的表示
- AT&T 记法由 指令助记符的后缀 确定内存操作数的大小
- b:byte,8 比特
- w:word,16 比特
- l:long,32 比特
- q:quadruple word,64 比特
- Intel 记法则是由 内存操作数的前缀 确定其大小
- byte ptr:字节,8 比特
- word ptr:字,16比特
- dword ptr:双字,32比特
- qword ptr:四字,64比特
- 远跳转、调用与返回的记法
- AT&T 远跳转、调用记法:
[Asm] 纯文本查看 复制代码 ljmp/lcall $section, $offset ;Intel 为 [Asm] 纯文本查看 复制代码 jmp/call far section:offset - AT&T 远返回记法:
[Asm] 纯文本查看 复制代码 lret $stack-adjust ;Intel 为 [Asm] 纯文本查看 复制代码 ret far $stack-adjust
参考资料与阅读材料
- 《Using as》 9.15.3.1 AT&T Syntax versus Intel Syntax
发贴,预防帐号被回收。
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|