L oop Никогда не заканчивается в сборе? - PullRequest
0 голосов
/ 03 февраля 2020

По сути, у меня ниже код сборки:

global _start
section .bss
    input:  resq 100
section .data
    buf: db "Input> ",  7
    pas: db "password", 8
section .text
_start:
    mov eax, 4
    mov ecx, buf
    mov edx, 7
    int 0x80

    mov eax, 3
    mov ecx, input
    mov edx, 100
    int 0x80
    mov cx, 50
Loop:
    dec cx
    mov eax, 4
    mov ecx, pas
    mov edx, 8
    int 0x80

    jnz Loop
    mov eax, 1
    int 0x80

Я пытаюсь l oop через 0-50 и вывести переменную pas или, возможно, buf из поля ввода. Но этот l oop продолжает печатать pas бесконечно. Я предполагаю, что проблема заключается в переназначении ecx, но в противном случае, не помещая мою строку в ecx, как бы я ее напечатал? или вообще выполнить какую-либо вещь в моем l oop?

Ar c: Linux kali 5.2.0-kali2-amd64 #1 SMP Debian 5.2.9-2kali1 (2019-08-22) x86_64 GNU/Linux

1 Ответ

3 голосов
/ 03 февраля 2020

Мое предположение о перезаписи ecx было верным, исправили его, используя push & pop, как показано ниже:

Кредит переходит к @ Jester.

global _start
section .bss
    input:  resq 100
section .data
    buf: db "Input> ",  7
    pas: db "password", 8
section .text
_start:
    mov eax, 4
    mov ecx, buf
    mov edx, 7
    int 0x80

    mov eax, 3
    mov ecx, input
    mov edx, 100
    int 0x80
    xor cx, cx

Loop:
    inc cx
    push cx
    mov eax, 4
    mov ecx, input
    mov edx, 8
    int 0x80

    pop cx
    cmp cx, 5
    jne Loop

    mov eax, 1
    int 0x80
...