二進位制安全學習:Example:Function Prologue and Function Epilogue(基礎函式呼叫機制)

鴻漸之翼發表於2021-01-01

NTUS
例項程式:
在這裡插入圖片描述
分析:
程式解釋:
定義val,val = function add(2)
add(2):
2=num-1 ==> num=3
return num =num+add(2)=3+2=5
val=num=5
編譯成彙編:
在這裡插入圖片描述
彙編程式碼部分分析:

#Function Prologue部分:
push rbp
mov rbp,rsp
sub rsp,0x10
#分配新的local varibal,即Stack中開闢新空間
mov edi,0x2
 #val=add(2);在stack中分配空間
call 4004e7 <add> 
#stack pointer point to address 4004e7

Main函式在不一定是第一個被執行的函式,編譯器會首先執行library等初始化函式。
Stack中首先放入Address: _libc_start_main+231,等到Main函式執行完後, Return: _libc_start_main+231.

call 完函式後,進入函式:
在這裡插入圖片描述
現在進入add函式:

#開闢stack新空間
push rbp 
#切一個新的localvaribal
mov rbp,rsp
sub rsp,0x10 
mov DWORD PTR [rbp-0x4],edi 
#edi暫存器放到localvaribal[rbp-0x4]地址
cmp DWORD PTR [rbp-0x4],0x1
#判斷是否等於1
#CMP指令用法
#cmp(compare)
#CMP OPR1,OPR2
#CMP (OPR1)-(OPR2)
jne DWORD 4004ff <add+0x18>
#jne是一個條件轉移指令。當ZF=0,轉至標號處執行。
mov eax,0x1 
jmp 4005313 <add+0x2c>
#把2放到localvaribal 
#然後跳到地址4005213
mov eax,DWORD PTR [ebp-0x4]

待更,敬請期待。

關注:Hunter網路安全 獲取更多資訊
網站:bbs.kylzrv.com
CTF團隊:Hunter網路安全

相關文章