11

sysenterではなく、すべてのシステムコールに対してgcc use int命令を強制することは可能ですか?この質問は奇妙に聞こえるかもしれませんが、PythonやFirefoxなどのいくつかのプロジェクトをこの方法でコンパイルする必要があります。

概要

jbcreixのおかげで、glibc 2.9のソースコードをダウンロードし、sysdeps / unix / sysv / linux / i386 / sysdep.hの行を変更して、によるsysenterの使用を無効にしました#undef I386_USE_SYSENTER

4

2 に答える 2

2

inに置き換えsysenterた後、Cライブラリを再コンパイルし、再度リンクします。int 0x80syscall.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

だから彼はそれを正しく理解したと思う、asveikau。

于 2010-01-26T04:13:08.893 に答える
2

gccは変更しません。libc(より正確には再コンパイル)とカーネルを変更します。gccはsysenter命令を発行しません。汎用のsyscall(2)インターフェイスへの呼び出しを生成します。これにより、システムコールの開始と終了に統合されたフロントエンドが提供されます。

または、Pentiumを使用することもできます。SYSENTERは、PII=]まで導入されませんでした。Linuxで使用される興味深いメソッドについては、次のKernelTrapリンクに注意してください。http://kerneltrap.org/node/531

于 2010-01-26T03:32:43.627 に答える