Будучи новичком в сборке x86_64, я пытаюсь написать базовую программу «hello» на своем ноутбуке с 64-битной OpenBSD. Программа завершается с кодом выхода 0, но, похоже, игнорирует системный вызов для записи текста в стандартный вывод. Почему?
Я использую ассемблер GNU и создаю исполняемый файл с помощью:
as -o hello.o hello.s; ld -Bstatic hello.o
# OpenBSD ELF identification
.section ".note.opensd.ident", "a"
.p2align 2
.long 0x8
.long 0x4
.long 0x1
.ascii "OpenBSD\0"
.long 0x0
.p2align 2
.section .data
msg: .ascii "hello"
.section .text
.globl _start
_start:
push $5 # number of bytes to write
push $msg # message address
push $1 # file descriptor 1 for stdout
mov $4, %eax # write is system call 4
syscall
push $0 # exit code 0
mov $1, %eax # exit is system call 1
syscall
syscall
, а не стек. Кажется, быть таким же во FreeBSD. Может быть, вы путаете системный вызов и int 0x80? - person tux3   schedule 10.01.2015