我正在嘗試創建一個程序,用於演示目的生成非法指令異常。獲取非法指令異常的最簡單方法
似乎有一個簡單的解決我的問題:
cmpxchgl %edx, %ecx
但是,而不是讓我在運行時異常時,編譯器(FASM)不希望編譯代碼。它說「非法指令」(這可能是正確的,實際上很高興提醒我之前)。
用於獲取非法指令異常的任何解決方案是爲我好,所以你可以
一)點我到另一個編譯器,只需編譯代碼
二)申請一個解決方法我的命令
c)中提出了一種完全不同的指令(要簡單,oneliners優選)
我正在嘗試創建一個程序,用於演示目的生成非法指令異常。獲取非法指令異常的最簡單方法
似乎有一個簡單的解決我的問題:
cmpxchgl %edx, %ecx
但是,而不是讓我在運行時異常時,編譯器(FASM)不希望編譯代碼。它說「非法指令」(這可能是正確的,實際上很高興提醒我之前)。
用於獲取非法指令異常的任何解決方案是爲我好,所以你可以
一)點我到另一個編譯器,只需編譯代碼
二)申請一個解決方法我的命令
c)中提出了一種完全不同的指令(要簡單,oneliners優選)
簡單:ud2
(0F 0B
)
其全部目的是引發無效的操作碼異常。
您可以從指令集參考中自己查找機器碼。 我已經爲你做了,cmpxchgl %edx, %ecx
是0x0F 0xB1 0xCA
。只需將它們粘貼到您的代碼中即可,如DB
或.byte
或任何您的編譯器支持的代碼。
順便說一句,GAS
無詞彙地組裝它。
看來FASM太聰明瞭。即使'.byte'也會給編譯器帶來錯誤。 –
剛剛檢查過,fasm使用'DB'指令,它組裝得很好。但請參閱哈羅德的解決方案。 – Jester
我不完全理解Intel指令集的引用,所以我沒有弄清楚要使用哪個字節。你的字節序列運行良好,對我來說沒有非法指令。 –
@harold:對不起,我只是想阻止ARM的答案。我已經重新簽名到x86,64位也沒問題。如果我的標籤仍然不正確,請隨時重新標籤。 –