0

我正在处理一些x86汇编程序分析任务,并试图找出快速调用行为。

虽然在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!)edx传递参数。

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

4

0 回答 0