かなり単純な問題。
この nasm は、ユーザーが書いたメッセージ (つまり、hello) をファイルに書き込むことになっています。これも、引数からのユーザー入力によって決定されます。これは問題なく実行されますが、問題は、後で使用されないすべての null バイトも書き込まれることです。たとえば、ユーザー入力用に 32 バイトを予約し、ユーザーが入力用に 4 バイトしか使用しない場合、バイト用のバイトが 28 ヌル バイトと共に出力されます。
null バイトの出力を停止するにはどうすればよいですか?
使用したコード:
global _start
section .text
_start:
mov rax, 0 ; get input to write to file
mov rdi, 0
mov rsi, msg
mov rdx, 32
syscall
mov rax, 2 ; open the file at the third part of the stack
pop rdi
pop rdi
pop rdi
mov rsi, 1
syscall
mov rdi, rax
mov rax, 1 ; write message to file
mov rsi, msg
mov rdx, 32
syscall
mov rax, 3 ; close file
syscall
mov rax, 1 ; print success message
mov rdi, 1
mov rsi, output
mov rdx, outputL
syscall
mov rax, 60 ; exit
mov rdi, 0
syscall
section .bss
msg: resb 32
section .data
output: db 'Success!', 0x0A
outputL: equ $-output