GNU/Linux >> Tutoriales Linux >  >> Linux

En un controlador SIGILL, ¿cómo puedo omitir la instrucción ofensiva?

Es muy hacky e INPORTABLE pero:

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

instala el sighandler así:

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

Eso podría funciona si sabe cuánto omitir (y es un proceso de Intel) :-)


Linux
  1. ¿Cómo puedo encontrar la versión de Fedora que uso?

  2. ¿Cómo puedo recordar el argumento del comando bash anterior?

  3. ¿Cómo puedo configurar el 'backend' en matplotlib en Python?

  4. ¿Cómo puedo ejecutar código PHP desde la línea de comandos?

  5. ¿Cómo puedo anteponer una cadena al comienzo de cada línea en un archivo?

¿Cómo puedo obtener el estado del teclado en Linux?

¿Cómo puedo ver el tamaño de los archivos y directorios en Linux?

¿Cómo puedo proporcionar una contraseña SSH a SVN en la línea de comandos?

¿Cómo puedo saber la ruta absoluta de un proceso en ejecución?

¿Cómo puedo editar $ PATH en Linux?

¿Cómo puedo controlar la longitud de la cola de aceptación?