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

时间:2016-02-06 14:23:55

标签: linux assembly 64-bit nasm x86-64

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

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)

我在Linux中使用nasm编码(Ubuntu 14.04)

2 个答案:

答案 0 :(得分:2)

要进行打印,您还需要传递地址,因此mov rdx, [string]错误,您需要mov rdx, stringlea rdx, [string]。此外,您的最终系统调用是错误的,因为那是read。您可能希望mov rax, 60将其设为exit

请注意,这就是您发布Minimal, Complete, and Verifiable example

的原因

答案 1 :(得分:0)

通常,Linux要求您使用出口

mov rax, 60
xor rdi, rdi
syscall