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

Ошибка:

Ошибка сегментирования (сделан дамп памяти)

Ругается именно на вывод информации. Помогите, пожалуйста, решить проблему. Конечная цель программа: получить основную информацию о системе.


Ответы (0 шт):