一尘不染

查找哪些汇编指令导致了非法指令错误,而无需调试

linux

运行我用汇编语言编写的程序时,Illegal instruction出现错误。是否有一种方法可以知道导致错误的指令,而无需进行调试,因为我所运行的计算机没有调试器或任何开发系统。换句话说,我在一台机器上编译并在另一台机器上运行。我无法在正在编译的计算机上测试程序,因为它们不支持SSE4.2。我运行程序的机器仍然支持SSE4.2指令。

我认为这可能是因为我需要告诉汇编器(YASM)识别SSE4.2指令,就像我们通过向gcc传递-msse4.2标志一样。还是您认为这不是原因?知道如何告诉YASM识别SSE4.2指令吗?

也许我应该捕获SIGILL信号,然后对SA_SIGINFO进行解码,以查看程序执行了哪种非法操作。


阅读 545

收藏
2020-06-07

共1个答案

一尘不染

实际上,您经常会收到非法指令错误,这不是因为您的程序包含非法操作码,而是因为您的程序中存在一个错误(例如,缓冲区溢出),该错误使您的程序跳转到具有纯数据或代码的随机地址中,而没有跳转到操作码的开始。

2020-06-07