64 비트 리눅스에서 간단한 프로그램으로 __NR_exit
을 인쇄 할 경우 값은 <asm/unistd_64.h>
에 정의 된대로 60입니다. 그러나, (-nostdlib 컴파일)이 코드는 세그먼테이션 폴트 (segfault) : __NR_exit
이 <unistd.h>
unistd.h 상수 linux x86_64
의 32 비트 버전 1로 정의된다
void _start(){
asm("movl $1,%eax;"
"xorl %ebx,%ebx;"
"int $0x80");
}
을 :
void _start(){
asm("movl $60,%eax;"
"xorl %ebx,%ebx;"
"int $0x80");
}
을하지만,이 예상대로 실행 분명히 1이 정확한 상수입니다. 32 비트 syscall 값이 사용되는 이유는 무엇입니까?
$ uname -a
Linux galois 3.14.6-1-ARCH #1 SMP PREEMPT Sun Jun 8 10:08:38 CEST 2014 x86_64 GNU/Linux