FASM - программа не работает при использовании стека - PullRequest
0 голосов
/ 11 декабря 2018

Я хотел бы знать, почему мой код не работает, когда я пытаюсь использовать стек.Программа должна напечатать свое имя.

Вот код без использования стека, который работает:

format elf executable
entry _start

segment readable executable
strlen:
    mov ebx,0
    strlen_loop:
        cmp byte [eax+ebx],0
        je strlen_end
        inc ebx
        jmp strlen_loop
    strlen_end:
        inc ebx
        ret
_start:
    mov eax,[esp+4]
    call strlen

    mov eax,4
    mov ecx,[esp+4]
    mov edx,ebx
    mov ebx,0
    int 80h

    mov eax,1
    mov ebx,0
    int 80h

Вот код с использованием стека (программа просто выходит / ничего не делает):

format elf executable
entry _start

segment readable executable
strlen:
    mov ebx,0
    strlen_loop:
        cmp byte [eax+ebx],0
        je strlen_end
        inc ebx
        jmp strlen_loop
    strlen_end:
        inc ebx
        ret
_start:
    mov eax,[esp+4]
    call strlen
    push ebx

    mov eax,4
    mov ebx,0
    mov ecx,[esp+4]
    pop edx
    int 80h

    mov eax,1
    mov ebx,0
    int 80h

1 Ответ

0 голосов
/ 19 февраля 2019

Я новичок в разработке Linux, но если я понял вашу проблему, у вас есть ошибка в этом блоке:

mov eax,4
mov ebx,0
mov ecx,[esp+4] ; you wrote 'push' instruction above so value of 4 is incorrect now
pop edx
int 80h

Вы можете просто поменять эти две строки, чтобы исправить это:

pop edx
mov ecx,[esp+4]
...