GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann ich in einem SIGILL-Handler die anstößige Anweisung überspringen?

Es ist sehr hacky und UNTRAGBAR, aber:

void sighandler (int signo, siginfo_t si, void *data) {
    ucontext_t *uc = (ucontext_t *)data;

    int instruction_length = /* the length of the "instruction" to skip */

    uc->uc_mcontext.gregs[REG_RIP] += instruction_length;
}

Installieren Sie sighandler so:

struct sigaction sa, osa;
sa.sa_flags = SA_ONSTACK | SA_RESTART | SA_SIGINFO;
sa.sa_sigaction = sighandler;
sigaction(SIGILL, &sa, &osa);

Das könnte funktionieren, wenn Sie wissen, wie weit Sie überspringen müssen (und es ist ein Intel-Proc) :-)


Linux
  1. Wie können Sie installierte Versionen der glibc-Bibliotheken ermitteln?

  2. Wie kann ich die Größe von Dateien und Verzeichnissen in Linux sehen?

  3. Wie kann ich SVN in der Befehlszeile ein SSH-Passwort bereitstellen?

  4. Wie kann ich die Symbolleiste in Emacs dauerhaft ausblenden?

  5. Wie kann ich die Länge der Annahmewarteschlange überwachen?

Wie kann ich das neueste Anaconda mit wget installieren

Wie kann ich die Anzahl der Benutzer online in Linux finden?

Wie kann ich den absoluten Pfad eines laufenden Prozesses erfahren?

Wie kann ich den $PATH unter Linux bearbeiten?

Wie finde ich die älteste Datei in einem Verzeichnisbaum?

Wie kann ich den gesamten Text in einem PDF rastern?