如何在 Assembly x64 中将字符串作为输入

How to take a string as a input in Assembly x64

我正在编写一个程序来检查字符串是否为回文。我想从用户那里获取一个字符串作为输入。该字符串可以包含从数字到特殊字符的任何字符。我怎样才能从用户那里获取输入。我试过下面的代码。

global _start
section .bss
    string resb 9

section .text
_start:
    mov rax,0            ;Am I doing this correct ?
    mov rdi,0
    mov rsi,string
    mov rdx,8
    syscall

    xor rax,rax
    mov rdx,[string]
    mov rax,1
    mov rdi,1
    mov rsi,rdx
    mov rdx,8
    syscall

    mov rax,0
    mov rdi,0
    syscall

上面的代码是否正确,因为当我输出字符串时它显示分段错误。错误是

Segmentation fault (core dumped)

我在 nasm Linux(Ubuntu 14.04)

中编码

为了打印你还需要传递地址所以mov rdx, [string]是错误的,你需要mov rdx, stringlea rdx, [string]。另外,你最后的系统调用是错误的,因为那又是一个 read 。您可能希望 mov rax, 60 使其成为 exit

看,这就是为什么你应该 post Minimal, Complete, and Verifiable example

通常Linux需要您使用出口

mov rax, 60
xor rdi, rdi
syscall