当前位置: 首页 > 知识库问答 >
问题:

汇编中标准c函数如何接受参数?[副本]

司寇祺
2023-03-14

我有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对应于这里?它是关键基础比较吗

共有1个答案

汤兴生
2023-03-14

根据您的操作系统,有两种可能的调用约定(请参阅此处了解更多详细信息)。在Microsoft上,顺序为RCX、RDX、R8、R9。在Unix上,顺序是RDI、RSI、RDX,RCX、R9、R8。请注意,开头的“r”或“e”仅指示您是使用寄存器的所有64位(r)还是仅使用较低的32位(e)。因此,在您的情况下,我猜您使用的是Unix,对应关系是rdi=key,ecx=size,r8d=compar。

 类似资料:
  • 标准c数学函数 -> 详解 标准c数学函数 abs 语法: #include <stdlib.h> int abs( int num ); 功能: 函数返回参数num.的绝对值。例如: int magic_number = 10; cout << "Enter a guess: "; cin >> x; cout << "Your guess was " << abs( magic_n

  • 本文向大家介绍C#函数式编程中的标准高阶函数详解,包括了C#函数式编程中的标准高阶函数详解的使用技巧和注意事项,需要的朋友参考一下 何为高阶函数       大家可能对这个名词并不熟悉,但是这个名词所表达的事物却是我们经常使用到的。只要我们的函数的参数能够接收函数,或者函数能够返回函数,当然动态生成的也包括在内。那么我们就将这类函数叫做高阶函数。但是今天我们的标题并不是高阶函数,而是标准高阶函数,

  • 其他标准c函数 -> Details 其他标准c函数 abort 语法: #include <stdlib.h> void abort( void );功能: 终止程序的执行。返回值依赖于执行,可以通过返回值显示错误。 相关主题: exit() and atexit(). assert 语法: #include <assert.h> void assert( int exp );功能: 宏asse

  • 其他标准c函数 其他标准c函数 abort() 停止程序执行 assert() 当表达式非真,停止程序执行 atexit() 当程序退出执行设定的程序 bsearch() 执行折半查找 exit() 停止程序执行 getenv() 获取指定环境变量的值 longjmp() 从设定点执行程序 qsort() 执行快速排序 raise() 向程序发送信号 rand() 返回一个随机数 setjmp()

  • 标准c内存函数 -> 详解 标准c内存函数 calloc 语法: #include <stdlib.h> void *calloc( size_t num, size_t size ); 功能: 函数返回一个指向num 数组空间,每一数组元素的大小为size。如果错误发生返回NULL。 相关主题: free(), malloc(), and realloc(). free 语法: #incl