我只学习汇编语言(nasm),有更多的问题。例如,我想编写asm代码来获取有关操作系统的信息。我使用Linux86bit。在代码中,我使用syscall uname。在浏览器中有关于这个系统调用和代码的更多信息。我找到了这个链接:
https://github.com/hc0d3r/asm/blob/master/uname.asm
Uname syscall in buffer overflow
但我使用的是86位系统。因此,我尝试为我的系统重写代码。我知道,在寄存器eax中,我应该移动syscall的值(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)printf上的这个错误。对不起,我的英语不好。
发布于 2021-02-24 13:16:15
我为linux x86编写了代码。请看这里(也许会有用)
https://github.com/OlegInfoSecurity/uname_x86
此错误发生在我输出(打印)信息时。我更改了输出信息的代码,程序是工作的。
https://stackoverflow.com/questions/66087308
复制相似问题