gcc调用规范

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版权协议,转载请附上原文出处链接和本声明。