linux syscall uname for x86



我只学汇编语言(nasm),还有更多的问题。例如,我想使asm代码获得有关操作系统的信息。我用的是linux 86位。在代码中,我使用系统调用uname。在浏览器中有关于此系统调用和代码的更多信息。我找到了这个链接:

https://github.com/hc0d3r/asm/blob/master/uname.asm

在缓冲区溢出

但是我用的是86位系统。所以,我试着为我的系统重写代码。我明白,在寄存器eax中,我应该移动系统调用的值(0x7a或122),并在寄存器ebx中移动数组的地址。

我使用第一个链接作为例子,但得到错误。那么,你能帮我解决这个问题吗?

这是我的主代码:

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

,我得到了这个错误:

segmentation error (memory dump made)

打印错误。对不起,我的英语不好。

我为linux x86编写代码。看这里(也许会有用)

https://github.com/OlegInfoSecurity/uname_x86

当我输出(打印)信息时发生这个错误。我更改了输出信息和程序的代码。

最新更新