# Calling Convention Caller / Callee 的關係,為什麼要分開有 Caller / Callee? 因為函式呼叫牽涉到參數的傳遞, 並不只是單純跳到那個Address執行程式碼再跳回來這麼簡單, 呼叫副程式(callee)的主程式(caller), 需要知道怎麼填參數,副程式才能接到參數後進行處理, 再將結果, 傳給主程式, 所以這段協定, 稱之為Calling Convention(呼叫慣例)。 呼叫慣例 (Calling Convention) 函式的呼叫,在不同的指令集有所差別,透過呼叫慣例 (Calling Convention)規範下,描述了函數的呼叫方式。 例如: * caller 或 callee 去分別要負責保存哪些 register * 參數如何傳遞是如何被傳遞的? * push stack、放在 register、兩種混合 * push stack * 放置在 register:MIPS()、ARM($ a1~ $ a4)、x64 * 兩種混合:x86 * 是在呼叫前暫存引數,還是呼叫後暫存參數? * 呼叫前暫存引數:x86、x64、ARM * 呼叫後暫存引數:MIPS * 如何在呼叫結束後恢復原來的參數值? ### reference * [調用約定(Calling Convention)淺析](https://zhuanlan.zhihu.com/p/111028312) * [BUFFER OVERFLOW 5 C/C++ Function Operation](https://www.tenouk.com/Bufferoverflowc/Bufferoverflow2.html) * [x86 呼叫函式的設計慣例 (call convention)](http://fcamel-life.blogspot.com/2011/10/x86-call-convention.html) * [Calling Convention (呼叫慣例) ](http://daydreamman.blogspot.com/2007/01/calling-convention.html)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up