Syscall из встроенного asm в x86 64 Linux?
почему этот мусор печати вместо выхода из моей программы изящно? Я использую системные вызовы таким образом на BSD, и мне интересно, что мне нужно, чтобы он работал в Linux.
int
main(int argc, char **argv)
{
__asm ("movq ,%rax; movq ,%rdi; syscall"); /* exit(0) ? */
return 0;
}
спасибо.
2 ответов
почему этот мусор печати вместо выхода из моей программы изящно?
Per CESA-2009-001, "Syscall 1-выход на i386, но запись на x86_64".
что мне нужно, чтобы заставить его работать в Linux
используйте ординалы syscall из текущего unistd_64.h
надеюсь, что это помогает!
Syscall 1-это выход на i386, но я считаю, что пишу на x86-64.
EDIT: это кажется неточным: Согласно веб-сайту, который, похоже, не имеет слишком много информации о сборке x86-64 Linux, это, похоже, ожидаемая настройка регистра перед инструкцией syscall.
rax system call number
rbx arg0
rcx return address from syscall
rdx arg2
rsi arg3
rdi arg4
r8 arg5
r9 arg1 (expected by gcc in %rcx)
r10-r15 should be saved/restored by C code
rbp dito What is dito??