汇编基础
差别
| 核心维度 | Intel 格式 | AT&T 格式 |
|---|---|---|
| 数据流向 (DST / SRC) | 指令 目的(DST), 源(SRC)(左边是被赋值者,符合
a = b 逻辑) |
指令 源(SRC), 目的(DST)(数据从左向右流动,类似
a -> b) |
| 寄存器标识 | 直接书写名称 例:eax, rsp |
必须加 % 前缀 例:%eax,
%rsp |
| 立即数 (常数) | 直接写数值 例:100, 0x10 |
必须加 $ 前缀 例:$100,
$0x10 |
| 数据长度控制 | 修饰内存地址 (byte ptr,
dword ptr) 例:mov dword ptr [ebx], 1 |
在指令末尾加后缀 (b, w,
l, q) 例:movl $1, (%ebx) |
| 内存寻址表示 | [base + index*scale + disp]
例:[ebx + ecx*4 + 0x10] |
disp(base, index, scale)
例:0x10(%ebx, %ecx, 4) |
| 类型扩展指令 | 使用显式功能指令名 (movsx, movzx)
例:movsx eax, bx |
组合源与目的的尺寸后缀 (movswl, movzwl)
例:movswl %bx, %eax |
| 典型代表工具 | Visual Studio、x64dbg、IDA Pro、Ghidra | GCC、GDB、Linux 内核源码、GNU Assembler |
汇编基础
https://fu01.github.io/posts/84aee333/