問題タブ [execv]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - シェルを自作する
お分かりのように、これは宿題です。これはCで実装されます。
まず、シェルexを出力する関数をいくつか作成しました
その後、入力行を「|」でトークン化します。区切り文字として、後でパイプされるコマンドを取得します。
だから今、私は char *const 配列を作成する必要があります。
これからどのように進めていくべきか、ヒントを教えていただけますか?
c - execv() を使用する場合、そのようなファイルまたはディレクトリはありません
date、ls などの単純なコマンドを言語 c で解釈できる基本的なシェルを作成しようとしています。
まず、このように PATH 変数を取得して、後で execv() 関数に渡します。
値を出力すると、次のようになります。
Ubuntuを実行するためにvirutalboxを使用していることに注意してください。これは、単純な ls コマンドを試すために使用しているコードです。変数行の下のコードでは、ユーザーが書いた実際のコマンドです。この場合は「ls」です。
そして、私が得る結果はこれです:
何か案は?
c - execl() bash が eio (入出力エラー) を返した後に stdin から読み取る
次のコードは、シェルで実行すると期待どおりに動作します。
しかし、このプログラムをユーザーのシェルとして設定し、ホストに ssh してこのプログラムをシェルとして実行するread(0, &buf123, 1);
と、EIO (入出力エラー) が返されます。
ただし、bash ではなくexecl(bash)
非対話型の bash またはその他のプログラムに変更すると、成功します。execl(bash -c "id")
read(0, &buf123, 1);
したがって、このエラーを再現するには、次の 2 つの条件を満たす必要があります。
これを回避する理由と方法を理解するのを手伝ってくれる人はいますか?
strace
結果は次のとおりです。
前もって感謝します!
stack - execve で環境変数を使用した C エクスプロイト
C プログラミング言語では、execve の場合:
envp を悪用するためにどのように使用できますか?
次に、envp を介して値を渡す場合、NULL で終了する必要がありますか?
最後に、envp はスタックのどこに配置されますか?
前もって感謝します!