2014-02-24 72 views
1

我正在嘗試創建一個程序,用於演示目的生成非法指令異常。獲取非法指令異常的最簡單方法

似乎有一個簡單的解決我的問題:

cmpxchgl %edx, %ecx 

但是,而不是讓我在運行時異常時,編譯器(FASM)不希望編譯代碼。它說「非法指令」(這可能是正確的,實際上很高興提醒我之前)。

用於獲取非法指令異常的任何解決方案是爲我好,所以你可以

一)點我到另一個編譯器,只需編譯代碼

二)申請一個解決方法我的命令

c)中提出了一種完全不同的指令(要簡單,oneliners優選)

+0

@harold:對不起,我只是想阻止ARM的答案。我已經重新簽名到x86,64位也沒問題。如果我的標籤仍然不正確,請隨時重新標籤。 –

回答

7

簡單:ud20F 0B

其全部目的是引發無效的操作碼異常。

1

您可以從指令集參考中自己查找機器碼。 我已經爲你做了,cmpxchgl %edx, %ecx0x0F 0xB1 0xCA。只需將它們粘貼到您的代碼中即可,如DB.byte或任何您的編譯器支持的代碼。

順便說一句,GAS無詞彙地組裝它。

+0

看來FASM太聰明瞭。即使'.byte'也會給編譯器帶來錯誤。 –

+1

剛剛檢查過,fasm使用'DB'指令,它組裝得很好。但請參閱哈羅德的解決方案。 – Jester

+0

我不完全理解Intel指令集的引用,所以我沒有弄清楚要使用哪個字節。你的字節序列運行良好,對我來說沒有非法指令。 –