如何在x86-64 linux中实现brk系统调用?我的代码如下:
Mysyscall(uint64_t n, uint64_t a1){
uint64_t ret;
__asm__ __volatile__("movq %0, %%rax\n\t"
"movq %1, %%rdi\n\t"
"syscall\n"
: "=r"(ret)
: "g"(n), "g"(a1));
return ret; }
Mysyscall(SYS_brk, uint64_t increment);
但它不起作用。我想我可能会对asm操作数使用错误的约束。但仍然难以弄明白。
答案 0 :(得分:0)
我不在linux上,所以我无法对此进行测试。但基于http://blog.rchapman.org/post/36801038863/linux-system-call-table-for-x86-64,我希望它是这样的:
__asm__ __volatile__("syscall"
: "=a" (ret)
: "0" (12), "D" (a1)
: "rcx", "r11", "cc");
您可能还需要"记忆"撞。
要了解约束,请查看i386部分:https://gcc.gnu.org/onlinedocs/gcc/Machine-Constraints.html