2020-11-13(调用约定)
a. x86 32位架構(gòu)的調(diào)用約定
__cdecl:參數(shù)從右往左依次壓入棧中,調(diào)用完畢,由調(diào)用者負(fù)責(zé)將這些壓入的參數(shù)清理掉,返回值置于EAX中,絕大多數(shù)x86平臺(tái)的c語(yǔ)言程序都在使用這種約定
__stdcall:參數(shù)同樣從右往左依次壓入棧中,調(diào)用完畢,由被調(diào)用者負(fù)責(zé)清理壓入的參數(shù),返回值同樣置于EAX中。windows的很多api都是這種方式提供的
__thiscall:為類方法專門(mén)優(yōu)化的調(diào)用約定,將類方法的this指針?lè)旁贓CX寄存器中,然后將剩余參數(shù)壓入棧中
__fastcall:為加速調(diào)用而生的調(diào)用約定,將第一個(gè)參數(shù)放在ECX中,將第二個(gè)放在EDX中,然后將后續(xù)的參數(shù)從右往左壓入棧中。
b.X86 64位架構(gòu)的調(diào)用約定
Microsoft x64位(x86-64)調(diào)用約定:在windows上使用,一次(從左往右)將前四個(gè)參數(shù)放入RCX,RDX,R8,R9這4個(gè)寄存器,然后將剩下的參數(shù)從右往左壓入棧中。
SystemV x64調(diào)用約定:在linux macOS 上使用,比Microsoft的版本多了兩個(gè)寄存器,使用RDI,RSI,RDX,RCX,R8,R9這六個(gè)寄存器傳遞前6個(gè)參數(shù),剩下的從右至左壓棧
總結(jié)
以上是生活随笔為你收集整理的2020-11-13(调用约定)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2020-11-13(四大组件简单回忆内
- 下一篇: 2020-11-13(混淆技术)