2015-04-16 163 views
-1

我創建具有以下簽名的函數任意號碼:的彙編參數(X86,ATT)

int function_test (char *something, ...); 

讓我們假設在*的東西有什麼東西,讓我知道有多少參數爲通過(就像printf與'%'一樣)。

所以我存儲在%ebx當前參數號爲4的倍數,從8日開始,這樣我就可以得到8(%ebp)12(%ebp)

我如何做才能得到該參數的內容?當我嘗試時:

movl %ebx(%ebp),variable 

我收到一個錯誤(junk %ebp after register)。

如何獲取該參數的內容?那麼增加其價值的語法是什麼?

+1

您應該使用Google的「x86尋址模式」,具體是AT&T的語法。我認爲你可以用'(%ebx,%ebp)'做一些事情,但可能不是直接給'變量'(需要另一個寄存器)。 – lurker

回答

1

movl (%ebp, %ebx), %eax。注意你不能有兩個內存引用,所以如果你想要在variable中,你將不得不分兩步進行。明顯增加使用inc而不是mov

+0

謝謝,現在它工作!對於內存引用是真的,我最終弄清楚了(困難的方式......;) – francisaugusto