C程序集将参数插入r10 r8 r9寄存器

时间:2019-07-02 20:07:42

标签: c gcc x86-64 inline-assembly

我想在C语言中使用汇编语言,以便将syscall用于写入和mmap函数。 对于写功能,很明显我们可以使用类似的东西

asm ("syscall" : "=a" (res) : "D" (fd), "S" (buf), "d" (buf_size), "a" (1));

D = edi | rdi
S = esi | rsi
d = edx | rdx
a = eax | rax

这里一切都很酷,没有问题,但是某些功能(r10,r8,r9)也需要注册!!!

list of syscalls with parameters and registers

现在我对该功能(带有r ...)寄存器的使用有疑问... 例如, sys_mmap 函数也将全部这3个(r)寄存器都占用

现在要执行此功能,我应该怎么做才能通过r10,r8,r9?扩展程序集中r10,r8,r9的关键字是什么?

为什么不重复: 这不是重复的问题...。因为在其他问题中,他们使用了

register long r10 asm("r10") = a4;

在这里我使用了宏并且没有功能!所以我不想定义变量(r10),您甚至可以说可以像(movl %5, %%r10)那样使用iniside asm!

0 个答案:

没有答案