這兩天的pwn題環境都是在linux中,採用的組合語言是 at&t 格式。之前學習的是intel格式的8086彙編,今天學習了下at&t組合語言。
基於x86 架構的處理器所使用的彙編指令一般有兩種格式:
操作intel格式at&t格式
暫存器命名
push eax
pushl %eax
常數\立即運算元
push 50
pushl $50
運算元順序
運算元排列是從源(右)到目的(左),如add eax(目的),edx(源)(eax=eax+edx)
運算元排列是從源(左)到目的(右),如add %edx(源),%eax(目的)(%eax=%eax+%edx)
運算元的字長
字尾b、w、l分別表示運算元為位元組(byte,8 位元)、字(word,16 位元)和長字(long,32位元)
用字首byte ptr 和 word ptr表示
絕對轉移指令jmp
jmp eax
運算元前要加上'*'作為字首,如jmp *eax
呼叫指令call
call eax
運算元前要加上'*'作為字首,如call *eax
記憶體引用
section:[base+index*scale+displacement]
section:displacement(base,index,scale)
遠端轉移指令
jmp far section:offset
ljump $section, $offset
遠端子呼叫指令
lcall $section, $offset
call far section:offset
記憶體運算元
mov ebx, [ebp - 3]
movl -3(%ebp), %ebx
push 引數
push 函式的返回位址
push bp (保留bp之前的值,方便以後恢復)
mov bp, sp (保留sp之前的值,方便以後恢復)
sub sp,空間大小 (分配空間給區域性變數)
保護可能要用到的暫存器
使用cc(int 3)填充區域性變數的空間
--------執行業務邏輯--------
恢復暫存器之前的值
mov sp, bp (恢復sp之前的值)
pop bp (恢復bp之前的值)
恢復棧平衡 (add sp,引數所佔的空間)
AT T組合語言
at t彙編和8086組合語言雖然兩者很相似,但是還是不能根據8086的語法規則來讀at t彙編的吧,所以還是要看看at t彙編的語法規則,因為在讀核心 時,跟硬體打交道的部分 是用at t彙編編寫的,所以不可避免的會遇到at t彙編,下面先來看看at t彙編的語法規則吧。一 大小寫 intel格式...
AT T組合語言筆記
1。在gcc產生的彙編中,0x80498d4表示立即數,而0x80498d4表示記憶體位址0x80498d4對應的內容。對於lable,比如value,則 value表示value的位址,value表示value的值。設函式func的位址 func 0x8048828 這兩種呼叫都是一樣的 1 ca...
組合語言 彙編指令
功能 用來進行資料傳輸。以 mov a,b 為例,相當於a b。具有以下形式 mov 暫存器,資料 mov 暫存器,暫存器 mov 暫存器,記憶體單元 mov 記憶體單元,暫存器 mov 段暫存器,暫存器 功能 用來做加法。以 add a,b 為例,相當於a a b。具有的形式,和 mov 一樣。功...