如何使gcc保留其他寄存器?

如何使gcc保留其他寄存器?,gcc,assembly,Gcc,Assembly,在x86_64上,我想用gcc编译一个C函数,该函数保留除rax之外的所有寄存器。有没有一种简单的方法可以做到这一点?您具体的使用案例是什么?我认为gcc无法立即做到这一点,但是添加自定义调用约定应该很容易。在汇编中编写一个保存所有寄存器的函数,然后调用C函数,根据需要传递参数,然后在返回前还原寄存器。@fuz@RossRidge代码从gcc生成的.o读取,并用ptrace注入另一个进程。它应该对这一过程的干扰最小。最好是通过gcc将其作为单个函数输出,这样我就不必处理链接等问题。如果解决方案不

x86_64
上,我想用gcc编译一个
C
函数,该函数保留除
rax
之外的所有寄存器。有没有一种简单的方法可以做到这一点?

您具体的使用案例是什么?我认为gcc无法立即做到这一点,但是添加自定义调用约定应该很容易。在汇编中编写一个保存所有寄存器的函数,然后调用C函数,根据需要传递参数,然后在返回前还原寄存器。@fuz@RossRidge代码从
gcc
生成的
.o
读取,并用
ptrace
注入另一个进程。它应该对这一过程的干扰最小。最好是通过
gcc
将其作为单个函数输出,这样我就不必处理链接等问题。如果解决方案不涉及编译自定义
gcc
,那也很好。我将尝试创建一个保存寄存器的
asm
块。您能否创建一个汇编函数(例如在NASM或GNU assembly中)来保存(推送)C函数没有的额外寄存器,调用C函数,并在返回时还原寄存器(pop)?