标准c函数在汇编中如何接受参数?

时间:2018-11-24 04:42:57

标签: c assembly x86-64

我有64位MacOS汇编代码,该代码对数组执行二进制搜索。在标准 C 库中的二进制搜索为:

void* bsearch (const void* key, const void* base,
               size_t num, size_t size,
               int (*compar)(const void*,const void*));

我的程序集看起来像

mov    %edi,0x2(%rsp)
mov    $0x2010,%r8d
mov    $0x4,%ecx
lea    0x2(%rsp),%rdi
callq  <bsearch@plt>

我想知道bsearch是否具有确定的参数顺序,即是否有任何方法可以知道rdi, ecx, r8d对应于此?是keybasecompar吗?

1 个答案:

答案 0 :(得分:2)

有两种可能的调用约定,具体取决于您的操作系统(有关更多详细信息,请参见here)。在Microsoft上,顺序为RCX,RDX,R8,R9。在Unix上,顺序为RDI,RSI,RDX,RCX,R8,R9。请注意,开头的“ r”或“ e”仅表示您是使用寄存器的全部64位(r)还是仅使用低32位(e)。因此,在您的情况下,我想您正在使用Unix,对应关系为rdi = key,ecx = size,r8d = compar。