問題タブ [execve]
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 - fork() と Execve、minix システム C、コア ダンプ
私は現在 C を学んでおり、Minix 仮想マシン内でシェルを作成することに取り組んでいます。これは、ls、cd などの Minix で既に利用可能なライブラリ関数を使用して実行しています...
子プロセスを fork した後、コマンドを実行するのではなく、コア ダンプが発生するという問題が発生しました。
これは私がこれまで取り組んできたコードです。/bin/ls をシェルのパラメーターとして渡すと、1 つのユーザー入力で ls を 2 回出力することができますが、アクションを実行するとシェルが終了します。それはすべきではありません。他の機能を使用して、一度印刷してから、ユーザー入力の待機に戻ることができるようにしたいと考えています。
パラメータを渡さない場合、シェルは「exit」のみを受け入れ、他のコマンドは受け入れません。メイン メソッド、execve、またはその両方から引数句 (argv[]) を削除すると、予期されるエラーがスローされます。
私が使用したすべての関数のドキュメントを読み、それらを具体的に選択したので、私が行っていることが実際に不可能でない限り、それらを変更する必要がないことを感謝します.
まだ C を学んでいるので、専門用語を短くしたり、フレーズを理解しやすくしたりしていただければ幸いです。私の問題が以前に質問として提起されたかどうかはよくわかりませんが、約20の異なる方法で問題をグーグル検索しましたが、問題のほとんどのバージョンはc ++、c#用に作成されているか、私のものと似ていません問題、私の理解から。
私はまだ数時間いるので、情報を逃した場合は、お気軽にコメントして、説明や情報などを求めてください.
linux - c プログラム内から呼び出された場合、stdin/stdout を使用する zlib の zpipe 実行可能ファイルにデータを渡すにはどうすればよいですか?
私は圧縮データを含むファイルを生成できる C プログラム アプリケーションを持っています。このファイルは必要な zlib ヘッダーとフッターを追加することで zlib 形式に変換されます。アプリケーション内から zlib の zpipe 実行可能ファイルを呼び出して、データが正しく圧縮されていることを確認したいと考えています。
Linux コマンド ラインから直接 zpipe を呼び出す場合の構文は次のとおりです。したがって、Linux コマンド ライン シェルを使用して、ソース ファイルの内容は stdin に送られ、膨張したデータは stdout に送られます。
私のアプリケーションには独自の主な機能があります。最初に、zpipe ソース コードをアプリケーションにビルドし、必要なコードを zpipe のメイン関数からアプリケーションのメイン関数に組み込むことで、zpipe の inflate および deflate 関数を直接呼び出すことができました。
zpipe ソース コード自体を組み込むのではなく、アプリケーションのメイン関数内から zpipe 実行可能ファイル自体を呼び出したいと考えています。
次のように、Linux コマンド ラインから自分のアプリケーションのメイン関数を呼び出します。
newargv を作成することにより、アプリケーション内から zpipe 実行可能ファイルを呼び出すことができますが、実際に zpipe に与えたファイル データを解凍させるまで、この操作は失敗します。
問題は、'zlib_format_input_compressed_file' の内容を C プログラム内から zpipe の stdin に送り、コマンド ライン シェルから行ったのと同じように、zpipe に結果を output_decompressed_file に送るように指示する方法です。これを達成するために「パイプ」を使用できますか?
c - execve() の使用中に一致する「」を探しているときに予期しない EOF が発生しました
execve() を介して複数のコマンドを (または単純な出力リダイレクトを使用して) 実行しようとしています。
これを配置すると (もちろん、この文字列を関数に渡す前に、スペースに分割し、それぞれを char* [] に分けます):
execve() 関数に、エラーが発生しました:
/usr/bin/cat: -c: 行 0: 一致する「」を探しているときに予期しない EOF が発生しました
/usr/bin/cat: -c: 1 行目: 構文エラー: 予期しないファイルの終わり
これは、正確にexecve() 関数を使用して複数の Linux コマンド (PATH にあるアプリケーション) を実行するという私の提案です(セキュリティ上の理由から)。
しかし、このソリューションは期待どおりに機能しません。
私のソリューションを修正するアイデアはありますか? それ以外の場合は execve() を使用できるかもしれませんが、方法がわかりません..
編集:簡略化されたソースコードを追加しました(申し訳ありませんが、会社の制限により、元の形式で貼り付けることはできません)ソースコード:
linux - execve後、前処理addrのメモリは解放されますか?
execve 関数では、引数はポインター配列によって渡されます。これらのポインタが前のスタックのメモリを指している場合、これらのメモリは新しいプロセス イメージで引き続きアクセスできます。
c - コンパイラのバグが原因で execve が失敗する?
私の PC では正常に動作するが、作業中のサーバーでコンパイルすると失敗する C プログラムで、不思議な現象が発生しています。基本的に execve の実行は失敗します。元のプログラムはそれほど大きくないので、どこに問題があるのかを理解するために、いくつかの部分をカットし始めました。
ここにプログラムのカットがあります (これは単なるカットであるため、もちろん意味がありません)、まあ、ここでも execve は失敗します:
}
しかし、この部分を取り出すと:
プログラムが再び動作を開始します。
ここにいくつかの情報があります:
- 私のPCのgccバージョン:4.8.4
- サーバー上の gcc バージョン: 4.6.3
- 上記のプログラムの組み立て: http://pastebin.com/nTagaErP
私のPCでコンパイルされたバージョンを使用すると、プログラムはサーバー上で正常に動作します。そのため、コンパイラに問題があると思われます。
python - subprocess.Popen でリストを使用する必要があるのはなぜですか?
私の質問は実用的というよりも理論的なものです。呼び出しでリストを使用する理由ではなく、方法を説明する回答がさらに見つかりました。subprocess.Popen
たとえば、知られているように:
次に、UNIX をいじっていて、興味深いものを見つけました。
おそらく両方execve
とsubprocess
使用するリストモデルは何らかの形で関連していますが、誰かがこれについて良い説明をすることができますか?
前もって感謝します。
macos - Execve 呼び出しでの OS X x86_64 のバス エラー
64 ビット Asm でSecurity Tubes execve チュートリアル ( http://hackoftheday.securitytube.net/2013/04/demystifying-execve-shellcode-stack.html ) を模倣しようとしています。バスエラーの原因がわかりません。GDB でアプリをステップ実行しましたが、フレームから外れるまでエラーは発生しませんでした。何が起こっているのか知っている人がいたら、ぜひ聞いてみたいです。
c - 引数を指定して Unix 外部コマンドを呼び出す
引数なしで unix 外部コマンドを呼び出す方法を見つけました (例: "ls"、"pwd")。次のようになります。
「ls -l」のような引数を持つ外部コマンドを受け入れるために、このコードを変換しようとしています