我想在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!