基本匯編指令詳解


幾種基本匯編指令詳解
常見寄存器
寄存器 16位 32位 64位
累加寄存器 AX EAX RAX
基址寄存器 BX EBX RBX
計數寄存器 CX ECX RCX
數據寄存器 DX EDX RDX
堆棧基指針 BP EBP RBP
變址寄存器 SI ESI RSI
堆棧頂指針 SP ESP RSP
指令寄存器 IP EIP RIP
匯編指令
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
1
2
3
4
5
6
7
8
push:壓棧
push %eax

相當於:

subl $4, %esp
//棧頂指針減4
movl %eax, (%esp)
//%eax -> esp 地址
1
2
3
4
pop:出棧
pop %eax

相當於:

movl (%esp), %eax
addl %4, %esp
//棧頂指針加4
1
2
3
call&ret
call
call 0x12345

相當於:

pushl %eip
movl $0x12345, %eip
//當前地址壓棧,存入新地址
1
2
3
ret
相當於:

popl %eip
//棧 -> eip
1
2
enter&leave
enter
push %ebp
movl %esp, %ebp
//將堆棧置空(棧上重堆)
1
2
3
leave
movl %ebp, %esp
popl %ebp
//將堆棧置空(撤銷堆棧)
1
2
3
例子:分析一段匯編代碼
pushl $8 ①
movl %esp, %ebp ②
subl $4, %esp ③
movl $8, (%esp) ④
1
2
3
4

 

https://blog.csdn.net/luoyhang003/article/details/46786591

https://zhuanlan.zhihu.com/p/420032439

http://c.biancheng.net/view/3602.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM