デバッグなしで不正な命令エラーを引き起こしたアセンブリ命令を見つける



アセンブリで記述したプログラムを実行すると、Illegal instruction が発生します エラー。私が実行しているマシンにはデバッガーや開発システムがないため、デバッグせずにエラーの原因となっている命令を知る方法はありますか?つまり、あるマシンでコンパイルし、別のマシンで実行します。 SSE4.2 をサポートしていないため、コンパイルしているマシンでプログラムをテストできません。それでも、プログラムを実行しているマシンは SSE4.2 命令をサポートしています。


-msse4.2 を渡して gcc で行うのと同じように、アセンブラー (YASM) に SSE4.2 命令を認識するように指示する必要があるためだと思います。 国旗。それともそれが理由ではないと思いますか? YASM に SSE4.2 命令を認識させる方法はありますか?


おそらく、SIGILL シグナルをトラップしてから、SA_SIGINFO をデコードして、プログラムが行う不正な操作の種類を確認する必要があります。


答え:


実際には、プログラムに不正なオペコードが含まれているためではなく、プログラムにバグ (バッファ オーバーフローなど) があるために、不正な命令エラーが発生することがよくあります。オペコードの開始。