我正在尝试创建一个程序,为演示目的生成非法指令异常。
我的问题似乎有一个简单的解决方案:
cmpxchgl %edx, %ecx
但是编译器(FASM)不想在运行时给我一个异常,而是不想编译代码。它说“非法指令”(这可能是对的,以前很警告我。)
获取非法指令例外的任何解决方案对我来说都没问题,所以你可以
a)指向另一个简单编译代码的编译器
b)为我的命令应用解决方法
c)提出一个完全不同的命令(应该很简单,首选oneliners)
答案 0 :(得分:7)
简单:ud2
(0F 0B
)
它的全部目的是引发无效的操作码异常。
答案 1 :(得分:1)
您可以从指令集参考中自行查找机器代码。
我已经为你做了,cmpxchgl %edx, %ecx
是0x0F 0xB1 0xCA
。只需将它们添加到代码中DB
或.byte
或编译器支持的任何内容。
顺便说一下,GAS
一言不发地组装起来。