1. ホーム
  2. c

[解決済み] デバッグせずにIllegal Instructionエラーの原因となったアセンブリ命令を見つけることができる

2022-02-25 01:48:51

質問

アセンブリで書いたプログラムを実行すると、次のようなメッセージが表示される。 Illegal instruction というエラーが発生します。どの命令がエラーを引き起こしているのか、デバッグせずに知る方法はないでしょうか?つまり、あるマシンでコンパイルして、別のマシンで実行するのです。コンパイルしているマシンはSSE4.2をサポートしていないので、私のプログラムをテストすることはできません。しかし、プログラムを実行するマシンは、SSE4.2命令をサポートしています。

おそらく、アセンブラ(YASM)にSSE4.2命令を認識させるために、gccで行うのと同じように -msse4.2 フラグを使用します。それとも、それが原因ではないとお考えですか?YASMにSSE4.2命令を認識させる方法について何か思いつきませんか?

を罠にかけるべきかもしれません。 シギル シグナルを送信し、SA_SIGINFO をデコードして、プログラムがどのような不正な操作をしているかを確認します。

どのように解決するのですか?

実は、不正な命令エラーが発生するのは、プログラムに不正なオペコードが含まれているからではなく、プログラムにバグ(例えば、バッファオーバーフロー)があり、プログラムがプレーンデータやコード内のランダムアドレスにジャンプするが、オペコードの開始位置にはジャンプしないためであることがよくあります。