문제

이 프로그램을 신속하게 종료하는 대신이 쓰레기가 왜 쓰레기를 인쇄합니까? 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??
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top