Trova quale istruzione di assembly ha causato un errore di istruzione illegale senza eseguire il debug

Trova quale istruzione di assembly ha causato un errore di istruzione illegale senza eseguire il debug


Durante l'esecuzione di un programma che ho scritto in assembly, ottengo Illegal instruction errore. C'è un modo per sapere quale istruzione sta causando l'errore, senza eseguire il debug, perché la macchina su cui sono in esecuzione non ha un debugger o alcun sistema di sviluppo. In altre parole, compilo in una macchina ed eseguo su un'altra. Non riesco a testare il mio programma sulla macchina che sto compilando perché non supportano SSE4.2. La macchina su cui sto eseguendo il programma supporta comunque le istruzioni SSE4.2.


Penso che forse perché ho bisogno di dire all'assembler (YASM) di riconoscere le istruzioni SSE4.2, proprio come facciamo con gcc passandogli il -msse4.2 bandiera. O pensi che non sia il motivo? Qualche idea su come dire a YASM di riconoscere le istruzioni SSE4.2?


Forse dovrei intercettare il segnale SIGILL e quindi decodificare SA_SIGINFO per vedere che tipo di operazione illegale fa il programma.


Risposte:


In realtà spesso ricevi un errore di istruzione illegale non perché il tuo programma contiene un codice operativo illegale ma perché c'è un bug nel tuo programma (ad esempio, un buffer overflow) che fa saltare il tuo programma in un indirizzo casuale con dati semplici o nel codice ma non in l'inizio del codice operativo.