如何强制gcc使用int进行系统调用,而不是sysenter?

Zel*_*luX 11 c compiler-construction gcc system-calls

是否可以强制gcc使用int指令进行所有系统调用,而不是sysenter?这个问题可能听起来很奇怪,但我必须以这种方式编译像Python和Firefox这样的项目.

摘要

感谢jbcreix,我已经下载了glibc 2.9源代码,并修改了sysdeps/unix/sysv/linux/i386/sysdep.h中的行,以禁用sysenter by #undef I386_USE_SYSENTER,并且它可以工作.

小智 2

sysenter替换为int 0x80in并再次链接后重新编译 C 库syscall.s

这不是编译器生成的代码,这意味着您很幸运。

正如OP所说,实际系统调用的最终起源在这里:

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

正如我怀疑确实有一个 syscall.S 只是 glibc 源代码是一个迷宫。

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

所以我认为他是对的,阿斯维考。