Действительно ли возможно вызвать международную инструкцию использования gcc для всех системных вызовов, но не sysenter? Этот вопрос может звучать странным, но я должен скомпилировать некоторые проекты как Python и Firefox этот путь.
Сводка
Благодаря jbcreix я загрузил исходный код glibc 2.9 и изменил строки в sysdeps/unix/sysv/linux/i386/sysdep.h, для отключения использования sysenter #undef I386_USE_SYSENTER
, и это работает.
Перекомпилируйте вашу библиотеку C после замены Sysenter
int 80
в Syscall.s
и снова ссылка.
Это не созданный компилятор, который означает, что вам повезет.
Конечное происхождение фактического SESCall здесь, как говорит ОП:
И, поскольку я подозреваю, что на самом деле был Syscall.s, это просто то, что источники Glibc - это лабиринт.
http://cvs.savannah.gnu.org/viewvc/libc/sysdeps/unix/sysv/linux/i386/syscall.s?root=libc&view=markup
Так что я думаю, что он понял правильно, асвейкау Отказ
Вы не модифицируете GCC; Вы изменяете LIBC (или точнее, перекомпилировать его) и ядро. GCC не выделяет инструкции Sysenter; Он генерирует вызовы на общий интерфейс Syscall (2), который представляет единую переднюю часть ввода и выхода и выхода системного вызова.
или, вы могли бы использовать Pentium; Sysenter не был представлен до PII =]. Обратите внимание на следующую ссылку KernelTrap для интересных методов, используемых Linux: http://kerneltrap.org/node/531