2014-06-10 48 views
0

我試圖將一個項目從Windows移植到Linux。 我承擔了以下回購協議中的代碼:Nspire Emu。 我能夠修復一些編譯錯誤,但很多功能需要重新實現,並且有些部分我無法理解。行內彙編說明

frame變量類型定義:

typedef struct { void *prev, *function; } os_exception_frame_t; 

直列件組裝我不明白:

asm ("movl %%fs:(%1), %0" : "=r" (frame->prev) : "r" (0)); 

asm ("movl %0, %%fs:(%1)" : : "r" (frame), "r" (0)); 

我真的很感激,如果有人能幫助我理解前面的代碼。 在此先感謝。

+0

gcc和visual c編譯器對內聯彙編有不同的語法。我將從編譯器中的文檔開始,它將正確地工作,並轉換爲您定位的編譯器所需的格式。 – Jay

+1

感謝您的提示。這是使用mingw gcc在Linux中編譯的,這意味着我可以在Windows和Linux中編譯代碼。那對我來說不是問題。問題是這段代碼的實際含義。我最近發現fs:0是SEH在Windows中發生的地方,現在我知道該代碼的作用。見http://feepingcreature.github.io/handling.html感謝您的時間和耐心,併爲回答我自己的問題感到抱歉。 PD:因爲我的名譽,我無法回答。 –

回答

1

此內聯asm從結構化異常處理程序堆棧中彈出窗口異常處理程序框架。 Linux不使用結構化的異常處理程序,所以這段代碼需要在linux上被刪除,並由完全不同的東西替代,完成相同的事情。這取決於代碼試圖通過操縱SEH堆棧實現的內容。 Linux中的等價物可能涉及註冊一些信號處理程序。

+0

非常感謝。我已經開始閱讀這個。 http://feepingcreature.github.io/handling.html –