运行我用汇编语言编写的程序时,Illegal instruction出现错误。是否有一种方法可以知道导致错误的指令,而无需进行调试,因为我所运行的计算机没有调试器或任何开发系统。换句话说,我在一台机器上编译并在另一台机器上运行。我无法在正在编译的计算机上测试程序,因为它们不支持SSE4.2。我运行程序的机器仍然支持SSE4.2指令。
Illegal instruction
我认为这可能是因为我需要告诉汇编器(YASM)识别SSE4.2指令,就像我们通过向gcc传递-msse4.2标志一样。还是您认为这不是原因?知道如何告诉YASM识别SSE4.2指令吗?
-msse4.2
也许我应该捕获SIGILL信号,然后对SA_SIGINFO进行解码,以查看程序执行了哪种非法操作。
实际上,您经常会收到非法指令错误,这不是因为您的程序包含非法操作码,而是因为您的程序中存在一个错误(例如,缓冲区溢出),该错误使您的程序跳转到具有纯数据或代码的随机地址中,而没有跳转到操作码的开始。