2012-10-06 2 views
0

인라인 어셈블러 (gcc 4.2.1, Mac OS 10.7.5)에서 write 시스템 호출을 호출하려고하는데 코드가 성공적으로 컴파일되지만 isn 전혀 출력이 없습니다.gcc 인라인 어셈블러 (64 비트)를 사용하여 시스템 호출을 호출하지 못했습니다.

:이 오류가 Xcode의 4.5 디버거의 코드를 실행하여

$ ./test 

:

$ gcc main.c -o test 

실행 : GCC와

int main() 
{ 
    char s[] = "Test\n"; 
    // write(1, s, 5); 
    asm(
     "movq $1, %%rax;" 
     "movq $1, %%rdi;" 
     "movq %0, %%rsi;" 
     "movq $5, %%rdx;" 
     "syscall;" 
     : 
     : "r"(s) 
     : "%rax", "%rdi", "%rsi", "%rdx" 
    ); 
} 

컴파일 : 이것은 전체 코드입니다

Thread 1: EXC_SYSCALL (code=1, subcode=0x1) 

코드에 무슨 문제가 있습니까? 우분투 12.04 LTS로 성공적으로 실행됩니다.

감사합니다.

+2

시스템 호출에 Linux 및 Mac OS X에서 동일한 번호가 반드시 필요하지는 않습니다. Google에 간단한 여행으로 많은 정보를 찾을 수 있습니다. 다음은 Linux에서 Mac OS X로 간단한 프로그램을 번역하는 방법을 설명하는 링크입니다. http://thexploit.com/secdev/mac-os-x-64-bit-assembly-system-calls/ –

답변

2

위의 내 의견에서 언급했듯이 시스템 호출 번호는 다릅니다. 당신은 맥 OS X의 작업을하기 위해이 프로그램을 얻을 수 %rax0x2000004을 둘 필요가 당신이 당신의 예에서 exit 콜 번호 1를 사용하고 있기 때문에 나는, 당신의 프로그램이 하나, 우분투에서 어떻게 작동하는지 정말 모르겠어요

, 대신 write입니다.

+0

32 비트 및 64 비트 Linux는 동일하지 않습니다. 여기 좀보세요 : http://www.acsu.buffalo.edu/~charngda/linux_syscalls_64bit.html – qwertz