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調用約定,它允許可變數量的參數。 –