1

が実行可能ファイル名を表していることは知っていますが、それがどのように実装されているか、つまりソース コード レベルargv[0]でファイル名とオプションを取得する方法がわかりません。最初はLinuxの組み込み関数に依存していると思っていましたが、Windowsでもサポートされていることがわかり、コンパイラーによって行われる可能性があると思いましたか?

4

3 に答える 3

6

これは実際にはC99標準の一部であるため、コンパイラとオペレーティングシステム間で同じ実装が行われます。5.1.2.2.1プログラムの起動(12ページ)から:

の値がargcゼロより大きい場合、が指す文字列はプログラム名argv[0]を表します。プログラム名がホスト環境から利用できない場合は、ヌル文字になります。の値が1より大きい場合、throughが指す文字列はプログラムパラメータを表します。argv[0][0]argcargv[1]argv[argc-1]

編集:Waleed Khanのコメントをフォローアップすると、次の方法でこれらの値を取得できます。

于 2012-12-27T04:52:19.053 に答える
0

バイナリが実行されると、glibc は関数 __libc_start_main を呼び出します。これはボールをシステム コール execve に渡し、そこで argv/argc がスタックにプッシュされます。

カーネルはスタックを解析して argv を設定します。したがって、解析部分を変更または理解することに興味がある場合は、カーネルの execve コードを調べる必要があります。lxr でそれをたどると、この行に到達します。私はあなたが探しているものだと信じています: http://lxr.linux.no/linux+v3.0/fs/exec.c#L1541

于 2012-12-28T02:24:53.673 に答える
-1

http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=fs/exec.c#l1376 sys_execve()を検索し、カーネルコードを読みます、あなたはそれを見つけることができます。

于 2012-12-27T05:28:21.040 に答える