Мой цикл не работает так, как я ожидаю - PullRequest
1 голос
/ 06 декабря 2011

Я запускаю программу на C, которая вызывает функцию внешней сборки. В академических целях я пытаюсь выполнить strcat. Я передаю две строки в мою программу сборки в качестве параметров char *. Я помещаю ebp в стек и назначаю string1 и string2 для edx и ebx следующим образом:

mov edx, [ebp+8]
mov ebx, [ebp+4]

Теперь все остальное выглядит следующим образом:

procStr1:
     cmp BYTE PTR [edx], 0
     jne readStr1
procStr2:
     cmp BYTE PTR [ebx], 0
     jne readStr2
     jmp bottom
readStr1:
    inc edx
    jmp procStr1
readStr2:
    mov BYTE PTR [edx], 'a'
    inc edx
    inc ebx
    jmp procStr2

bottom:
    inc edx
    mov BYTE PTR [edx], 0
    pop ebx
    pop edx
    pop ebp
    ret

Я просто проверяю, работает ли он, добавляя в конец строки1. Если я введу «привет» и «пока», я ожидаю, что Hiaaa будет распечатан программой C (распечатав string1). Вместо этого я обычно получаю 13 a после string1, независимо от того, насколько велика string2. Буду признателен за любой вклад, это действительно ошеломляет мой разум ..

1 Ответ

3 голосов
/ 06 декабря 2011

Вы делали:

push ebp
mov ebp, esp

наверху?

Если это так, ваши аргументы теперь можно найти по адресу:

mov edx, [ebp+8]
mov ebx, [ebp+Ch]  ; 0xC, not 4 -- C-language passes args right-to-left

Кроме того,

bottom:
    inc edx       ; This inc should be removed -- edx already points one
                  ; byte beyond the ultimate copied byte.
    mov BYTE PTR [edx], 0
...