2011-07-30 24 views
0

system()メソッドはシステムコマンドを許可するので、WindowsのC++プログラムではどうやってシステムコールを行いますか?また、その2つの違いは何ですか?システムコールとコマンド

編集:私はシステムコールとシステムの間の差が

EDITコマンド意味:私はシステムコマンドを使用すると、CMDで実行できるコマンドであることを発見した、あなたはまた、システム()メソッドを介してこれらを呼び出すことができますが、Iシステムコールを作成する方法がまだ分かりません

+1

"システムコール"は、オペレーティングシステムの設計においてかなり明確に定義されています。それはsystem()とは関係ありません。 Windowsは機能を全く公開しません。ユーザーモードプログラムでWin32 APIレイヤーを操作します。これは、最終的にリングの遷移をもたらす(またはしない)ことがあります。ネイティブWindows APIは文書化されていないため、Microsoftは既存のコードを壊すことなくWindowsバージョンを革新することができます。 –

+0

MS Windowsの世界では、Win32 APIは最終的にシステムコールを行うために呼び出す関数です。システムコールはカーネルコードを実行します。 UNIXはPOSIXライブラリと同じことをしますが、POSIXのほとんどの関数はシステムコール名と同じ名前です。 たとえば、cプログラムからopen()を呼び出す場合、libcの実装が呼び出され、システムコールopen()が呼び出されます。 システムコールでは、ユーザモードからカーネルモードに切り替えるための特別なアセンブリ命令が必要です – flumpb

+0

@システムコールとは何か分かっていましたが、説明は役に立ちました。システムコールとコマンドの違いを理解していますが、 ntdll.dllファイルを使用して、システムコールを行うことができるはずです。これらの関数を満たすパラメータを見つけることはできません。[link] http://dev.metasploit.com/users/opcode/syscalls.html私はDLLを介してアクセスすることができますが、私は半分のパラメータが何であるかのアイデアを持っていない、これはオペレーティングシステムコースのコーディングプロジェクトです。私は5つのウィンドウを呼び出す必要があります。 linux –

答えて

0

これは基本的な質問です。チュートリアルのオンラインまたは書籍を検索してください。また、MSDNには、ほとんどのWin32関数に関するドキュメントがあります。

#include <windows.h> 
int main(int argc, char* argv[]) 
{ 
    MessageBox(NULL, "Hello, World", "My First Win32 Call", MB_OK); 
    return 0; 
} 
+0

これはまったく基本的な質問ではありませんが、私は50以上のC++プログラムを書いていますが、あなたは、システムコールやシステムコマンドを直接使用することさえしません。 –

+0

大丈夫、次に 'asm int 3'についてはどうでしょうか。これはあなたが探しているものですか? – Mike

+0

いいえ、私はアセンブリを使用することはできません。私はC++を使用する必要があります。上記のntdll.dllに関するコメントを読んでください、それは私が探しているものの詳細を説明します –

0

CopyFileなどのシステム関数をWin APIとsystem()を介して呼び出すことの違いを意味する場合は、システム関数を使用して、静的またはファイルをコピーするコードを動的に呼び出します。 system()を呼び出すと、copyという実行可能ファイルを呼び出す別のプロセスが生成され、パラメータを渡してファイルをコピーします。

+0

edit –

関連する問題