Eva*_*oll 5 linux assembly x86-64 system-calls
在《低级编程:英特尔® 64 位架构上的 C、汇编和程序执行》一书中,它说:
关于系统调用参数 系统调用的参数与函数的参数存储在一组不同的寄存器中。第四个参数存储在 中
r10
,而函数接受第四个参数rcx
!原因是
syscall
指令隐式使用rcx
. 系统调用不能接受超过六个参数。
您可以在此Stack Overflow 帖子中也看到这一点,
系统调用是通过 syscall 指令完成的。这会破坏 %rcx 和 %r11,以及 %rax,但保留其他寄存器。
我理解 clobberingrax
存储返回码,但为什么是rcx
, 并且r11
clobbered in syscall
?是否有破坏rcx
/的特定系统调用的列表r11
?有没有关于破坏的约定?它们在任何系统调用中都被认为是安全的吗?
归档时间: |
|
查看次数: |
967 次 |
最近记录: |