ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

为何使用syscall clobber rcx?

2019-11-09 00:50:33  阅读:222  来源: 互联网

标签:assembly x86-64 system-calls linux


这个问题已经在这里有了答案:            >            Why do x86-64 Linux system calls modify RCX, and what does the value mean?                                    1个
在书Low-Level Programming: C, Assembly, and Program Execution on Intel® 64 Architecture中说:

On system call arguments The arguments for system calls are stored in a different set of registers than those for functions. The fourth argument is stored in r10 , while a function accepts the fourth argument in rcx!

The reason is that syscall instruction implicitly uses rcx. System calls cannot accept more than six
arguments.

您可以在Stack Overflow post中看到这一点,

A system-call is done via the syscall instruction. This clobbers %rcx and %r11, as well as %rax, but other registers are preserved.

我了解破坏rax来存储返回码,但是为什么rcx和r11却被syscall破坏了?是否有Clobber rcx / r11特定系统调用的列表?是否有破坏惯例?他们在任何系统调用中都被认为是安全的吗?

解决方法:

syscall指令使用rcx存储要返回的下一条指令的地址,并使用r11保存rflags寄存器的值.然后,这些值将由sysret指令恢复.

这是在执行CPU指令时由CPU完成的,因此任何特定于OS的调用约定都需要避免使用这些寄存器将参数传递给syscall.

标签:assembly,x86-64,system-calls,linux
来源: https://codeday.me/bug/20191109/2010728.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有