当前位置:  开发笔记 > 编程语言 > 正文

x86_64:强制gcc在堆栈上传递参数

如何解决《x86_64:强制gcc在堆栈上传递参数》经验,为你挑选了0个好方法。

我正在为x86-64系统开发setjmp/ longjmp自定义实现,它保存了CPU的整个上下文(即所有xmm,fpu堆栈等;不仅是callee-save寄存器).这是直接在汇编中编写的.

代码在最小的示例中工作正常(直接从汇编源调用它时).由于参数传递给自制程序setjmp/ longjmp函数的方式,在使用C代码时会出现问题.实际上,x64_64系统的SysV ABI规定参数应该通过寄存器传递(如果它们最多为6).我的职能签名是:

long long set_jmp(exec_context_t *env);
__attribute__ ((__noreturn__)) void long_jmp(exec_context_t *env, long long val);

当然,这不能正常工作.事实上,当我进入set_jmp,rdirsi已经被破坏,以保持指针envval.这同样适用long_jmprdi.

有没有办法强制GCC,例如依靠某些属性,强制通过堆栈传递参数?这将比包装set_jmplong_jmp使用某些定义更加优雅,这些定义手动将堆栈寄存器压入堆栈,以便稍后检索它们.

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有