x86 gcc编译汇编代码:fastcall行为

时间:2016-09-21 23:57:44

标签: gcc x86 calling-convention fastcall

我正在处理一些x86汇编程序分析任务,我正在尝试找出 fastcall 行为。

虽然在32-bit x86平台上,堆栈被定义为在调用转换中传递函数参数。但是,我观察到许多函数调用确实利用两个寄存器eaxedx来传递前两个函数参数。

例如,这是libgcrypt 1.6.1中的(简化)示例:

  mov  0x24(%esp), %eax
  ...
  mov  0x1c(%esp), %edx
  call mul_n
  ...
mul_n:
  ...
  mov  %eax, 0x20(%esp)
  mov  %edx, 0x24(%esp)

如您所见,注册eaxedx用于传递参数。我的观察是这两个寄存器总是用于传递前两个参数。

请注意,我使用gcc来编译代码。但是,我只能找到fastcall编译器的Microsoft定义,它使用寄存器 ecx(不是eax!)和{{1传递参数。

所以这是我的问题:这种edx优化有没有明确的定义?我找不到一些信息来源......

0 个答案:

没有答案