ABI просто не поддерживается, даже для 32-битных исполняемых файлов. Так что это как ядро Linux, построенное без
ал учебник по сборке, и я пытаюсь заставить программу hello world работать. Я использую Bash на Ubuntu в Windows.
Вот сборка:
section .text
global _start ;must be declared for linker (ld)
_start: ;tells linker entry point
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
msg db 'Hello, world!', 0xa ;string to be printed
len equ $ - msg ;length of the string
Я использую эти команды для создания исполняемого файла:
nasm -f elf64 hello.asm -o hello.o
ld -o hello hello.o -m elf_x86_64
И я запускаю его, используя:
./hello
Кажется, что программа работает без ошибки или ошибки сегментации, но не выдает никаких результатов.
Я не могу понять, почему код не будет выводить данные, но мне интересно, имеет ли отношение к этому использование Bash в Ubuntu в Windows? Почему он не производит вывод и как я могу это исправить?