2015-08-29 9 views
0

Я изучаю Assembly, и я создал простую программу выхода.Сборка: Код выхода Неверный

.section __DATA, __data 
.section __TEXT, __text 
.globl _main 

_main: 
    movl $0x2000001, %eax #System call exit, offset by 0x00000 
    movl $1, %ebx   #Exit Return code 
    syscall     #Wakes up kernal to run the systen call 

Как всегда после запуска файла, echo $? возвращает 0

Собрать и команду Ссылка:

as exit.asm -o exit.o 
ld exit.o -e _main -o exit 
./exit 
+1

Для какой операционной системы? Похоже, вы пытаетесь прицелиться в Дарвина? – icktoofay

+0

@icktoofay да Я в настоящее время работаю OS X 10.11 El Capitan – safaiyeh

ответ

2

Код выхода идет в %edi, не %ebx. (Я не уверен в канонической ссылке для этого, я просто использовал пробную версию и ошибку.)

+4

OS/X 64 бит использует [System V AMD64 ABI] (http://x86-64.org/documentation/abi.pdf) соглашения. Первый параметр в syscall передается как '% rdi'. Exit принимает один аргумент (код возврата), поэтому он помещается в '% rdi' –

Смежные вопросы