NASM x86_64删除新行字符,并在字符串末尾添加0

时间:2018-11-02 03:32:17

标签: linux nasm x86-64

当您使用系统读取从控制台获取新的换行符时,如何删除添加在字符串末尾的换行符? 我想在其末尾添加一个0,以使用该字符串打开文件

我正在这样输入:

mov     rdx,name_len    ; size_t count
mov     rsi,name        ; char *buf
mov     rdi,0           ; int fd, 0 for stdin
mov     rax,0           ; system read
syscall

1 个答案:

答案 0 :(得分:1)

read返回字符数,因此您可以索引缓冲区并检查最后读取的内容是否为换行符。或者只是使用0无条件地将其覆盖:

...
syscall                       ; rax = sys_read(0, buf, max_len)
mov byte [rsi + rax - 1], 0

假定没有错误,并且输入字符串是用换行符而不是EOF提交的。

(Linux syscall保留了除RAX(返回值)和RCX / R11以外的所有注册表,因此RSI仍然保留name。)