使用 sys_mkdir 创建目录。目录以?

Bug*_*rUK 1 assembly nasm

我正在学习汇编 (NASM) 并使用 Linux 系统调用。

我在使用以下代码时遇到问题。我正在尝试打电话sys_mkdir。应创建一个目录“Hello World”。但是,它正在创建以下Hello World?asmtest??. 为什么是这样?如何title包含以及如何删除?.

SECTION .data
msg:    db "Hello World", 10
len:    equ $-msg

title: db "asmtest", 7
mode:   dd 755

SECTION .text
global main

main:
    ; Make a directory            
    mov ecx,mode
    mov ebx,msg
    mov eax,39
    int 0x80

    ; Print Hello World to screen
    mov edx,len
    mov ecx,msg
    mov ebx,1
    mov eax,4
    int 0x80

    ; Exit
    mov ebx,0
    mov eax,1
    int 0x80
Run Code Online (Sandbox Code Playgroud)

Dav*_*zer 5

在这种情况下,您正在访问的函数调用是系统调用。虽然它不是 C 标准库的一部分,但此调用(以及许多类似的调用)中的字符串处理非常“像 C”,这意味着字节字符串始终以 null 结尾。

在您的情况下,由于您定义了两个字符串(中间有一些特殊字符,例如“10”和“7”),因此它将使用在指向的内存位置找到的第一个字符中的所有内容,msg并继续直到它发生查找空字节 ( 00)。

如果将 your 替换, 10, 0sys_mkdir正常工作,但您必须调整该字节才能使打印功能正常工作。