【问题标题】:How to take a string as a input in Assembly x64如何在 Assembly x64 中将字符串作为输入
【发布时间】:2016-05-16 11:45:48
【问题描述】:

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

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(Ubuntu 14.04) 中使用 nasm 进行编码

【问题讨论】:

  • 您也应该显示带有错误的代码...而且我假设您有一个 syscall 指令并且您在 linux 上...但我不需要假设,您应该也告诉过我们。也就是说,读数看起来是正确的。

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    通常Linux要求你使用退出

    mov rax, 60
    xor rdi, rdi
    syscall
    

    【讨论】:

      猜你喜欢
      • 2021-08-17
      • 2020-04-10
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 2013-07-18
      • 1970-01-01
      • 2017-05-05
      • 1970-01-01
      相关资源
      最近更新 更多