nasm системный вызов uname
Недавно начал изучать ассемблер, поэтому не до конца разбираюсь в некоторых моментах. Сейчас я реализую программу, которая будет получать основные сведения об операционной системе. Я использую прерывание linux x86 uname (0x7a или 122). В интернете нашел статьи с кодом на эту тему. Вот пример:
https://github.com/hc0d3r/asm/blob/master/uname.asm
https://stackoverflow.com/questions/53638845/uname-syscall-in-buffer-overflow
За образец взял первую ссылку. Но дело в том, что у меня система x86, а в примере x64. Я переписываю код под свою систему, но получил ошибку. Ниже всё указываю:
extern printf
SYS_WRITE equ 4
SYS_UNAME equ 122
SYS_EXIT equ 60
STDOUT equ 1
section .data
str: db '%s',10,0
UTSNAME_SIZE equ 65
space db ' '
break_line db 0xa
section .bss
uname_res resb UTSNAME_SIZE*5
section .text
global main
main:
mov eax, 0x7A
mov ebx, uname_res
int 80h
push dword [uname_res]
push dword str
call printf
mov eax, 1
int 80h
Ошибка:
Ошибка сегментирования (сделан дамп памяти)
Ругается именно на вывод информации. Помогите, пожалуйста, решить проблему. Конечная цель программа: получить основную информацию о системе.