如何在 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, string
或lea rdx, [string]
。另外,你最后的系统调用是错误的,因为那又是一个 read
。您可能希望 mov rax, 60
使其成为 exit
。
看,这就是为什么你应该 post Minimal, Complete, and Verifiable example。
通常Linux需要您使用出口
mov rax, 60
xor rdi, rdi
syscall
我正在编写一个程序来检查字符串是否为回文。我想从用户那里获取一个字符串作为输入。该字符串可以包含从数字到特殊字符的任何字符。我怎样才能从用户那里获取输入。我试过下面的代码。
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, string
或lea rdx, [string]
。另外,你最后的系统调用是错误的,因为那又是一个 read
。您可能希望 mov rax, 60
使其成为 exit
。
看,这就是为什么你应该 post Minimal, Complete, and Verifiable example。
通常Linux需要您使用出口
mov rax, 60
xor rdi, rdi
syscall