我学习汇编(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
答案 0 :(得分:4)
在这种情况下,您正在访问的函数调用是系统调用。虽然它不是C标准库的一部分,但是这个调用中的字符串处理(以及许多类似的字符串)非常“C like”,这意味着字节字符串总是 null终止。
在您的情况下,由于您定义了两个字符串(中间有一些特殊字符,如“10”和“7”),它将使用内存位置msg
找到的第一个字符。指向并继续前进,直到找到空字节(00
)。
如果您将, 10
替换为, 0
sys_mkdir
将正常运行,但您必须调整该字节才能使打印功能正常工作。