Assembly 获取非法指令异常的最简单方法

Assembly 获取非法指令异常的最简单方法,assembly,x86,x86-64,Assembly,X86,X86 64,我试图创建一个程序,该程序生成一个非法指令异常,用于演示 我的问题似乎有一个简单的解决方案: cmpxchgl %edx, %ecx 但是编译器(FASM)不想编译代码,而不是在运行时给我一个异常。上面写着“非法指令”(这可能是对的,实际上很高兴在此之前警告我) 任何获取非法指令异常的解决方案对我来说都是好的,所以您可以 a) 给我指出另一个只编译代码的编译器 b) 为我的命令应用变通方法 c) 提出一个完全不同的命令(应该简单,最好是一行程序)简单:ud2(0F 0B) 其全部目的是引发无效

我试图创建一个程序,该程序生成一个非法指令异常,用于演示

我的问题似乎有一个简单的解决方案:

cmpxchgl %edx, %ecx
但是编译器(FASM)不想编译代码,而不是在运行时给我一个异常。上面写着“非法指令”(这可能是对的,实际上很高兴在此之前警告我)

任何获取非法指令异常的解决方案对我来说都是好的,所以您可以

a) 给我指出另一个只编译代码的编译器

b) 为我的命令应用变通方法

c) 提出一个完全不同的命令(应该简单,最好是一行程序)

简单:
ud2
0F 0B


其全部目的是引发无效操作码异常。

您可以自己从指令集引用中查找机器码。 我已经为您完成了,
cmpxchgl%edx,%ecx
0x0F 0xB1 0xCA
。只需将它们作为
DB
.byte
或编译器支持的任何形式粘贴到代码中即可


顺便说一句,
GAS
不用一个字就把它组装起来。

@harold:对不起,我只是想阻止ARM应答。我已经重新标记到x86,64位也可以。如果我的标签仍然不正确,请随时重新标记。看来FASM太聪明了。甚至
.byte
都会给出编译器错误。刚刚检查过,fasm使用
DB
指令,并且它可以很好地进行汇编。但是请看harold的解决方案。我不完全理解Intel指令集参考,所以我没有弄清楚要使用哪些字节。你的字节序列运行得很好,对我来说没有非法指令。