GNU/Linux >> Belajar Linux >  >> Linux

Dalam penangan SIGILL, bagaimana saya bisa melewatkan instruksi yang menyinggung?

Ini sangat hacky dan UNPORTABLE tapi:

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;
}

pasang sighandler seperti itu:

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

Itu bisa bekerja jika Anda tahu seberapa jauh untuk dilewati (dan ini adalah proc Intel) :-)


Linux
  1. Bagaimana cara menemukan versi Fedora yang saya gunakan?

  2. Bagaimana saya bisa mendapatkan status keyboard di Linux?

  3. Bagaimana saya bisa mengatur 'backend' di matplotlib dengan Python?

  1. Bagaimana saya bisa mengeksekusi kode PHP dari baris perintah?

  2. Bagaimana saya bisa melihat ukuran file dan direktori di linux?

  3. Bagaimana saya bisa memberikan kata sandi SSH ke SVN di baris perintah?

  1. Bagaimana saya bisa mengetahui jalur absolut dari proses yang sedang berjalan?

  2. Bagaimana saya bisa mengedit $PATH di linux?

  3. Bagaimana saya bisa menemukan file terlama di pohon direktori