我正在学习汇编,并尝试了一些代码。这是代码:我希望输出是HelloWo,因为"o"后面有NULL(\0),但所有字符都输出到控制台,输出是:
HelloWo
"o"
HelloWo u
我正在使用这些命令创建并运行可执行文件:
nasm -f elf32 tes.asm -o tes.o [[ -f tes.o ]] && ld -m elf_i386 tes.o -o tes [[ -f tes ]] && ./tes
我的误解在哪里?我是不是把C和Assembly混在一起了?
x4shl7ld1#
如果int 0x80与eax = 4关心你的null终止符,那么它不需要你在edx中提供字符串的长度。它确实需要edx中字符串的长度,这一事实强烈表明它不关心null终止符,它只是打印您告诉它打印的字符数,而不管这些字符是什么。
int 0x80
eax
4
edx
1条答案
按热度按时间x4shl7ld1#
如果
int 0x80
与eax
=4
关心你的null终止符,那么它不需要你在edx
中提供字符串的长度。它确实需要edx
中字符串的长度,这一事实强烈表明它不关心null终止符,它只是打印您告诉它打印的字符数,而不管这些字符是什么。