1

我正在运行一个调用外部汇编函数的 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

我只是通过在 string1 的末尾添加 a 来测试它是否有效。如果我输入“hi”和“bye”,我希望 C 程序打印出 hiaaa(通过打印出 string1)。相反,无论 string2 有多大,我通常会在 string1 之后得到 13 个 a。我会很感激任何意见,这真的让我难以置信..

4

1 回答 1

3

你做了一个:

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
于 2011-12-05T23:28:04.953 回答