x86_64 Linux의 Inline ASM의 SyScall?
-
05-07-2019 - |
문제
이 프로그램을 신속하게 종료하는 대신이 쓰레기가 왜 쓰레기를 인쇄합니까? BSD에서 시스템 호출을 사용하고 Linux에서 작동하는 데 무엇이 필요한지 궁금합니다.
int
main(int argc, char **argv)
{
__asm ("movq $1,%rax; movq $0,%rdi; syscall"); /* exit(0) ? */
return 0;
}
감사.
해결책
이 프로그램을 신속하게 종료하는 대신이 쓰레기가 왜 쓰레기를 인쇄합니까?
당 CESA-2009-001, "SyScall 1은 i386에서 종료되지만 x86_64에 씁니다".
Linux에서 작동하게하려면 무엇이 필요합니까?
현재의 SyScall 조례를 사용하십시오 UNISTD_64.H
도움이 되었기를 바랍니다!
다른 팁
Syscall 1은 i386에서 종료되지만 x86-64에 글을 씁니다.
편집 : 이것은 부정확 한 것 같습니다. 웹에 따르면 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??
제휴하지 않습니다 StackOverflow