gpt4 book ai didi

linux - 自动运行终端命令的汇编代码

转载 作者:太空狗 更新时间:2023-10-29 12:15:13 29 4
gpt4 key购买 nike

最近,我写了一段汇编代码,要求输入密码,如果用户输入内部存储的正确密码,它会打印出“正确!”。否则,它会打印出“不正确!”。

代码如下:

section .text
global _start
_start:
mov edx, len_whatis
mov ecx, whatis
mov ebx, 1
mov eax, 4
int 80h ; outputs: "What is the password?"

mov edx, 5 ; expect 5 bytes of input(so 4 numbers)
mov ecx, pass
mov ebx, 0
mov eax, 3
int 80h ; accepts intput and stores in pass

mov eax, [pass] ; move the pass variable into eax
sub eax, '0' ; change the ascii number in eax to a numerical number
mov ebx, [thepass] ; move the thepass variable into ebx
sub ebx, '0' ; change the ascii number in ebx to a numerical number

cmp eax, ebx ; compare the 2 numbers
je correct ; if they are equal, jump to correct
jmp incorrect ; if not, jump to incorrect
correct:
mov edx, len_corr
mov ecx, corr
mov ebx, 1
mov eax, 4
int 80h ; outputs: "Correct!"

mov ebx, 0
mov eax, 1
int 80h ; exits with status 0
incorrect:
mov edx, len_incor
mov ecx, incor
mov ebx, 1
mov eax, 4
int 80h ; outputs: "Incorrect!"

mov eax, 1
int 80h ; exits with status: 1
section .data
whatis db "What is the password?", 0xA
len_whatis equ $ - whatis

thepass db "12345"

corr db "Correct!", 0xA
len_corr equ $ - corr

incor db "Incorrect!", 0xA
len_incor equ $ - incor
section .bss
pass resb 5

组装: nasm -f elf password.s

链接: ld -m elf_i386 -s -o password password.o

(如果您确实尝试组装链接并运行它,您可能会注意到它检查密码不正确 - 忽略它。这是“题外话”)

然后,我进行了测试:

  1. 我用 ./password 运行了代码
  2. 当系统提示我输入密码时,我输入了 123456 ,比代码预期的多一个字节
  3. 在我按下回车键并退出代码后,终端立即尝试运行命令 6

是什么导致了这种行为?这与汇编程序有关,还是我的计算机如何读取代码?

编辑:

而且,当我使用 12345 运行代码时,终端会在程序关闭时两次提示输入命令,就好像有人只是按下回车键而没有输入命令一样。

最佳答案

您只从标准输入读取五个字节,因此当您键入 123456↵ 时,您的应用程序最终读取 12345 并将 6↵ 留在缓冲区中。这会传递给 shell。

如果要读取整行,请使用更大的缓冲区。

关于linux - 自动运行终端命令的汇编代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27727716/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com