我正在运行一个调用外部汇编函数的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的末尾添加一个来测试它是否有效。如果我输入'hi'和'bye',我希望通过C程序打印出hiaaa(打印出string1)。相反,无论string2有多大,我通常会在string1之后得到13个。我很感激任何意见,这真的令人难以置信..
答案 0 :(得分: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