你好,我想告诉gcc如何调用函数,例如:
    __mycall void my_function(arg1) {
        do_something(arg1)
    }    __mycall:
        move $a0, (the first argument)
        jalr (the function we should call)
        nop我希望生成以下程序集代码:
    my_function(1);成为
    move $a0, 1
    jalr my_function
    nop我显然不想实现stdcall或fastcall之类的东西,我只是用一个例子来解释。
我认为这样做并不难,但我找不到如何编写内联程序集并使用内联程序集调用我的函数的例子,但这很难看,我将感谢帮助(:
发布于 2022-04-13 22:08:21
您可以使用fastcall或thiscall函数属性(x86-32)
在x86-32目标上,fastcall属性使编译器在寄存器ECX中传递第一个参数(if为整型),在寄存器EDX中传递第二个参数(if为整型)。随后的和其他类型的参数被传递到堆栈中。被调用的函数从堆栈中弹出参数。如果参数的数量是可变的,则将所有参数推送到堆栈上。
在x86-32目标上,这个调用属性导致编译器在寄存器ECX中传递第一个参数(如果是整型的)。随后的和其他类型的参数被传递到堆栈中。被调用的函数从堆栈中弹出参数。如果参数的数量是可变的,则将所有参数推送到堆栈上。此调用属性用于C++非静态成员函数。作为GCC的扩展,这个调用约定可以用于C函数和静态成员方法。
https://stackoverflow.com/questions/65645610
复制相似问题