Linux Hacking中,gcc通常有三种规范:cdecl、fastcall、pascal。
cdecl:c语言缺省规范,参数首先由有向左压入堆栈。所不同的是,函数本身不清理堆栈,调用者负责清理堆栈。由于这种变化,C调用约定允许函数的参数的个数是不固定的,这也是C语言的一大特色。
例如:
gcc -S 后,即为:(EDX:EAX 为结果以返回)
fastcall:之所以加上fast,原理是用寄存器代替内存栈以提速。
- 函数的第一个和第二个DWORD参数(或者尺寸更小的)通过ecx和edx传递,其他参数通过从右向左的顺序压栈
- 被调用函数清理堆栈
版权声明:本文为vincent2600原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。