2010-01-25 17 views
11

¿Es posible forzar el uso de gcc int instrucción para todas las llamadas al sistema, pero no sysenter? Esta pregunta puede sonar extraña, pero tengo que compilar algunos proyectos como Python y Firefox de esta manera.Cómo forzar el uso de gcc int para llamadas al sistema, no sysenter?

Resumen

Gracias a jbcreix, he descargado glibc 2.9 código fuente, y modificado las líneas de sysdeps/Unix/sysv/Linux/i386/sysdep.h, para deshabilitar el uso de SYSENTER por #undef I386_USE_SYSENTER , y funciona.

+3

fácil, recompile su biblioteca C después de reemplazar sysenter por int 80 en syscall.s y vuelva a vincular. Este no es un código generado por el compilador, lo que significa que tienes suerte. – jbcreix

+0

@jbcreix Gracias por eso. ¿Podría publicarlo como respuesta para que pueda aceptar la respuesta? – ZelluX

Respuesta

2

recompilar la biblioteca de C después de sustituir por sysenterint 80 en syscall.s y enlazar de nuevo.

Este no es un código generado por el compilador, lo que significa que tiene suerte.

El origen último de la llamada al sistema real es aquí, como dice el OP:

http://cvs.savannah.gnu.org/viewvc/libc/sysdeps/unix/sysv/linux/i386/sysdep.h?root=libc&view=markup

Y como sospechaba no era realmente un syscall.S es sólo que las fuentes de glibc son un laberinto.

http://cvs.savannah.gnu.org/viewvc/libc/sysdeps/unix/sysv/linux/i386/syscall.S?root=libc&view=markup

así que creo que lo hizo bien, asveikau.

+0

Pensé que en estos días el "int 80h" o "sysenter" viene de linux-gate.so que está mapeado a una página mágica por el kernel. Al menos en x86. – asveikau

1

No modifica gcc; modificas libc (o más exactamente, recompilas) y el kernel. gcc no emite instrucciones de sysenter; genera llamadas a la interfaz genérica syscall (2), que presenta una interfaz unificada para la entrada y salida de llamadas del sistema.

O bien, podría utilizar un Pentium; SYSENTER no se introdujo hasta PII =]. Tenga en cuenta el siguiente enlace KernelTrap de los métodos utilizados por Linux interesantes: http://kerneltrap.org/node/531

Cuestiones relacionadas