【发布时间】:2020-04-13 16:24:55
【问题描述】:
我正在尝试在 nasm 中进行简单的密码检查,但我的程序永远不会跳转到 correct_func,但密码是正确的。我是不是做错了什么?
section .data
msg1: db "Enter your password: ", 0
len1 equ $-msg1
correct: db "Correct!", 0x0a
lenc equ $-correct
wrong: db "Wrong!", 0x0a
lenw equ $-wrong
passwd: db "ASD123"
input
section .text
global _start
correct_func:
mov rax, 0x1
mov rdi, 1
mov rsi, correct
mov rdx, lenc
syscall
mov rax, 60
mov rdi, 0
syscall
ret
_start:
mov rax, 0x1
mov rdi, 1
mov rsi, msg1
mov rdx, len1
syscall
mov rax, 0x0
mov rdi, 0
mov rsi, input
mov rdx, 6
syscall
mov rax, passwd
mov rbx, input
cmp rax, rbx
je correct_func
mov rax, 0x1
mov rdi, 1
mov rsi, wrong
mov rdx, lenw
syscall
mov rax, 60
mov rdi, 0
syscall
【问题讨论】:
-
你比较的是
passwd和input的地址,而不是它们的内容。显然,地址总是不同的。您需要手动比较这些字符串的内容。 -
@fuz 哦,好的,你能发布一个答案来说明如何做到这一点吗?
-
这个question 可能很有趣并且已经包含正确的代码(使用
repe cmpsb)。然而,它不是完全重复的。 -
另请注意,您没有为
input保留任何空间。