我需要將指針推入eax,並將一個指針推入ebx寄存器。我首先解決了這個問題:GCC將指針推入eax和ebx寄存器
register int eax asm("eax");
register int ebx asm("ebx");
int main()
{
eax = ptr1;
ebx = ptr2;
}
它像一個魅力工作。但是,當我將其添加到其他代碼中時,我發現了一些有關gcc無法找到寄存器以在類AREG中泄漏的奇怪錯誤,這些錯誤與代碼中無關的部分無關。我搜索了一下,結果發現它實際上是gcc -.-中的一個bug。所以,我需要另一種方法,將兩個指針推入eax和ebx寄存器。任何任何想法?謝謝!
編輯因爲人們一直在問我在這裏想要完成什麼,所以我想我會解釋一下。
我需要改變一些彙編代碼的eax和ebx,我試圖在我的程序中運行。我需要執行這個彙編代碼,並通過eax和ebx寄存器給出一個指向參數的指針。我通過在ebx中推送一個指向它的指針來執行彙編代碼,並調用ebx。當我不調用globaly全局寄存器的東西時,但是在本地,彙編代碼崩潰。如果我全局調用它,在隨機函數結束時會出現這個奇怪的錯誤。當我刪除該功能時,它會在另一個隨機函數中引發相同的錯誤。直到我用完功能,然後它工作,但然後我錯過了代碼的其餘部分:P
請記住,EAX用於返回值。而且它只有32位,所以你不能在64位機器上的EAX中存儲指針。 –
@joachimPileborg沒關係,它是一個32位的exe文件。任何想法如何我可以做到這一點? –
「我搜索了一下,結果實際上是gcc中的一個bug」 - 不,幾乎肯定不是。當它不應該出現錯誤信息時,可能會出現錯誤,但這並不意味着每次得到該錯誤信息時,都是編譯器錯誤。有時候錯誤是有效的,錯誤信息提示你的代碼有什麼問題。 – hvd