2009-06-12 80 views

答えて

7

'kernel32.dll'もlibc.so.6に変換されます。 Windowsは最低レベルのPOSIXではないので、POSIX libc呼び出しをネイティブWin32呼び出しに変換するためには、追加の層が必要です。これがmsvcrt.dllの目的です。 Kernel32.dllには最低レベルの呼び出しが含まれています。 Linuxでは、これらのシステムコールはすでにPOSIXであるため、余分なライブラリは必要ありません。

+0

これは完全には正確ではありません - ほとんどのmsvcrt関数は* msvcrtで処理されますが、strtokのようなものは絶対にカーネルには行きません! –

+0

OSサポートが必要ない場合は、ライブラリが単独でそれを行うことができますが、それは当てはまります。 –

+0

は、LinuxのVDSO +ヘッダーのOS機能をエクスポートします。 –

0

kernel32.dllのwin32のどの機能を手動で検索し、linux/gnuで置き換えを探す必要があります。 Linuxには数多くの共有ライブラリがあります。すべてがオペレーティングシステム間で同じ場所に直接置き換えられるわけではありません。クロスプラットフォームのものを世話するライブラリがあります。

+0

よくあるのは、一般的なリストです。たとえば、どこでbrkとsbrkを見つけるはずですか? http://linux.die.net/man/2/sbrk – Unknown

+0

@Unknown:in libc。 – Juliano

2

libcはLinuxのkernel32に相当します。標準ライブラリのGNU拡張機能は、カーネルに呼び出すことができるすべての方法を処理します。

編集(技術的には、libcのは、どちらもここにもそこNTDLLの同等ですが、):だけ明確にする - カーネル自体がシステムコールと呼ばれる特殊な方法で呼び出される関数の数をエクスポートします。これらのシステムコールは実際の関数で囲まれています。 Linuxではこれはlibcで行われ、Windowsでは2回、ntdll(NtCreateFile)、Kernel32(CreateFileW/A)の順で実行されます。

Kernel32には、libcと同様に、システムコールではない(つまり、ユーザモードで100%のまま)他の多くの機能があります。

4

msvcrt.dllは、VC++(msvcrt - > MicroSoft Visual C++ RunTime)用の特定のDLLであるため、実際にはlibc.so.6に匹敵しません。

システムコール(オープン、クローズ、読み取り、書き込みなど)もlibcにあります。これらは、アセンブリ言語で記述されたソフトウェアの中断を回避する単なるラッパーです。

1

は、私はあなたが探しているかもしれないと思う:

Linuxカーネルのための「仮想ライブラリ」リンクである
linux-vdso.so.1 => (0x00000...) 

あなたのカーネルヘッダーはAPIの詳細を提供します。

これはすばらしいgoogleで見つかりました。

http://www.trilithium.com/johan/2005/08/linux-gate/

+0

VDSOはkernel32.dllよりもntdll.dllに似ています。 – CesarB

+0

私はWindowsを使わない...暗闇の中で刺す:P –

関連する問題