Finden Sie ohne Debugging heraus, welche Assembler-Anweisung einen Illegal Instruction-Fehler verursacht hat

Finden Sie ohne Debugging heraus, welche Assembler-Anweisung einen Illegal Instruction-Fehler verursacht hat


Beim Ausführen eines Programms, das ich in Assembler geschrieben habe, erhalte ich Illegal instruction Error. Gibt es eine Möglichkeit zu wissen, welche Anweisung den Fehler verursacht, ohne zu debuggen, da der Computer, auf dem ich laufe, keinen Debugger oder ein Entwicklungssystem hat. Mit anderen Worten, ich kompiliere auf einer Maschine und laufe auf einer anderen. Ich kann mein Programm nicht auf der Maschine testen, die ich kompiliere, weil sie SSE4.2 nicht unterstützen. Die Maschine, auf der ich das Programm ausführe, unterstützt dennoch SSE4.2-Anweisungen.


Ich denke, es liegt vielleicht daran, dass ich dem Assembler (YASM) mitteilen muss, dass er die SSE4.2-Anweisungen erkennt, genau wie wir es mit gcc tun, indem wir ihm den -msse4.2 übergeben Flagge. Oder meinst du das liegt nicht daran? Irgendeine Idee, wie man YASM anweist, SSE4.2-Anweisungen zu erkennen?


Vielleicht sollte ich das SIGILL-Signal abfangen und dann das SA_SIGINFO entschlüsseln, um zu sehen, welche Art von illegaler Operation das Programm ausführt.


Antworten:


Tatsächlich erhalten Sie häufig einen illegalen Befehlsfehler, nicht weil Ihr Programm einen illegalen Opcode enthält, sondern weil es einen Fehler in Ihrem Programm gibt (z Beginn des Opcodes.