1
我正在运行一个调用外部汇编函数的C程序。为了学术目的,我试图执行strcat
。我将这两个字符串作为char *参数传递给我的汇编程序。我推EBP堆栈,并指定字符串1和字符串到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
我只是测试,看看它的工作原理是将a到string1的结尾。如果我输入“hi”和“bye”,我希望通过C程序打印出hiaaa(打印出字符串1)。相反,我通常在string1之后得到13个a,无论string2有多大。我将不胜感激任何投入,这确实是令人难以置信的我的心..
+1数据处理看起来很好(除了'INC edx'),所以我怀疑这只是从正确的位置获取这些指针的问题 – Martin
我不太明白,当我在Visual Studio中编译时执行[ebp + C]时出现语法错误。从右到左,你的意思是第二个参数先被压入栈中? – Rythven
我编辑了后 - C是十六进制的,所以要么使用12(十六进制C的值),要么追加一个h。这个想法是正确的,只是一个语法错误。至于从右到左,是的,我的意思是第二个参数在第一个参数之前被推送。这是C调用约定,它允许可变数量的参数。 –