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

时间:2016-01-30 23:15:16

标签: 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

1 个答案:

答案 0 :(得分:4)

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

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

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