基础汇编指令(16bit 32bit 64bit)
(zz from http://blog.luoyuanhang.com/)
##常见寄存器
寄存器 | 16位 | 32位 | 64位 |
---|---|---|---|
累加寄存器
accumulator |
AX | EAX | RAX |
基址寄存器
base |
BX | EBX | RBX |
计数寄存器
count |
CX | ECX | RCX |
数据寄存器
data |
DX | EDX | RDX |
堆栈基指针
Base Pointer |
BP | EBP | RBP |
变址寄存器
Source Index |
SI | ESI | RSI |
堆栈顶指针
Stack Pointer |
SP | ESP | RSP |
指令寄存器
Instruction Pointer |
IP | EIP | RIP |
AH&AL=AX(accumulator):累加寄存器 BH&BL=BX(base):基址寄存器 CH&CL=CX(count):计数寄存器 DH&DL=DX(data):数据寄存器 SP(Stack Pointer):堆栈指针寄存器 BP(Base Pointer):基址指针寄存器 SI(Source Index):源变址寄存器 DI(Destination Index):目的变址寄存器 IP(Instruction Pointer):指令指针寄存器 CS(Code Segment)代码段寄存器 DS(Data Segment):数据段寄存器 SS(Stack Segment):堆栈段寄存器 ES(Extra Segment):附加段寄存器
##汇编指令
##mov
-
movb(8位)、movw(16位)、movl(32位)、movq(64位)
-
寄存器寻址:
movl %eax, %edx
eax -> edx -
立即数寻址:
movl $0x123, %edx
数字->寄存器 -
直接寻址:
movl 0x123, %edx
直接访问内存地址数据,edx = *(int32_t *)0x123; -
间接寻址:
movl (%ebx), %edx
%ebx 是个内存地址,(%ebx)指的是该地址中的数据,edx = *(int32_t*)ebx; -
变址寻址:
movl 4(%ebx), %edx
edx = *(int32_t*)(ebx+4);
##push & pull
###堆栈数据结构简介
####作用:
- 程序调用框架
- 传递参数
- 保存返回地址
- 提供局部变量
- ……
####结构:
-
相关寄存器: esp, ebp
-
相关操作: pop, push
//建立被调用者函数的堆栈框架 pushl %ebp movl %esp, %ebp //拆除框架 movl %ebp, %esp popl %ebp ret
###push:压栈
-
push %eax
相当于:subl $4, %esp //栈顶指针减4 movl %eax, (%esp) //%eax -> esp 地址
###pop:出栈
-
pop %eax
相当于:movl (%esp), %eax addl %4, %esp //栈顶指针加4
##call&ret
###call
-
call 0x12345
相当于:pushl %eip movl $0x12345, %eip //当前地址压栈,存入新地址
###ret
-
相当于:
popl %eip //栈 -> eip
##enter&leave
###enter
push %ebp
movl %esp, %ebp
//将堆栈置空(栈上重堆)
###leave
movl %ebp, %esp
popl %ebp
//将堆栈置空(撤销堆栈)
##例子:分析一段汇编代码
pushl $8 ①
movl %ebp, %esp ②
subl $4, %esp ③
movl $8, (%esp) ④
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程