問題タブ [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.
stack - シェルコードのスタック メモリ アドレス
ここでシェルコード(スタックメソッドを使用したexecve)の作成に関する基本的な記事を読んでいました:http://hackoftheday.securitytube.net/2013/04/demystifying-execve-shellcode-stack.html
ステップ 6: 文字列 "/bin/sh" が null で終了しているため、null 文字をプッシュします。その後、文字列「/bin/sh」を逆順にプッシュします
文字列が逆の順序でスタックにプッシュされるのはなぜですか?また、文字列をスタックにプッシュする「前に」文字列を終了するヌル文字がプッシュされるのはなぜですか?
c - execve とパイプを使用して読み取りプログラムからメイン プログラムにデータを取得する方法は?
fork を使用して子プロセスを作成する必要があり、親プロセスが子プロセスに別の C プログラム「read.c」(.txt ファイルからすべての整数を読み取り、平均を計算する) を実行するように指示するプロジェクトを行っています。 execve を使用して、パイプを介してその平均値を親プロセスに送信する必要があります。「process.c」プログラムの子プロセスで、「read.c」プログラムの結果の「平均値」を取得する方法がわかりません。一部の友人は、パイプ(pfd[2])に役立つファイル記述子をexecveに渡し、他のプログラム(read.c)からパイプを使用してデータをprocess.cプログラムに書き込む必要があると言いました。しかし、私はそれを行う方法がわからないので、正しく機能していません。process.c と read.c の両方のコードを投稿していますが、うまく機能させるにはどの変更を加える必要があるか教えてください。
process.c
read.c
read.c ファイルから process.c の子プロセスに出力を取得する解決策があれば教えてください。
c - C プログラムで omxplayer を execve/l 経由で実行すると、fork() の後に子プロセスの X 以外のコンソールにビデオが出力されない
ハイ。
ビデオ再生プロセスの PID を保存できるように、execve または execl 関数を介して C fork() の後に Raspberry Pi でomxplayer ( http://elinux.org/Omxplayer ) を実行しようとしています (システムが仕事をしないでください)。X コンソール/端末でプログラムを実行すると動作しますが、標準端末 (X を起動せずに) を介して実行すると、実行されますが、子プロセスで execve が呼び出された場合、ビデオは画面に出力されません。ちなみに、コンソールの「omxplayer ...」コマンドでプレーヤーを実行すると、動画が再生されて画面に出力されます。私はこの種のことに少し慣れていないので、これは私が解決できなかったり、答えを見つけることができなかった状況です. ここにいる人は、これを解決する方法や、可能な解決策を見つけるための指示を持っていますか?
注:コードは、Xでは完全に機能するため、正しいとわかっている単なるexecve呼び出しです。
c - SIGCHLD がキャッチされない
次のコードは、親プロセスが 10 秒間スリープしている間に、子プロセスとして "sleep 3" を fork して実行することを意図しています。親プロセスは、「スリープ 3」が終了した 3 秒後に SIGCHLD を受け取ることを期待しています。
これは起こらず、代わりに次のようになります。
ps -ef
を示しています
続いて:
次の 7 秒間 (この時点で親プロセスは終了します)。
問題は、clean_up_child_process
決して呼び出されないことです。
私が犯した間違いは何ですか?
ゾンビテスト.c:
c - C プログラムの .data セクションで静的変数を作成するアセンブリはどこにありますか?
初めてのポスター。CS2年生。
C ソース -> GCC コンパイル -> Linux 実行環境のコンテキストで、仮想アドレス空間の .data セクションに静的変数を作成する方法を調べています。
Cプログラムはtest.c
GDB に ' disass /m
' を要求すると、staticVar[] 作成用のコードがないことがわかります。これは、.s ファイルを検査すると、プロセス作成時にそこに配置された仮想アドレス空間の読み取り/書き込み .data セグメントに変数が存在することが明らかになるためです。 (このプロセスは私が興味を持っているものです)。
(私は ' ' でしたが) の出力を調べるとreadelf -A test.o
、オブジェクト ファイルには、データ セグメント内の配列の作成であると想定するアセンブリが含まれています。これがELF出力です。
(この出力を生成するコマンドを教えていただければボーナスです。readelfを使用して複製することはできません。Webサイトからコマンドを取得し、出力を保存しました。どのように生成されたか思い出せません)
[をちょきちょきと切る]
[をちょきちょきと切る]
仮定 (修正してください) : このアセンブリは実行可能ファイルに存在し、load_elf_binary() または execve() によって開始される一連の関数の一部によって実行されます。私には at&t (基本的なインテル) 構文の知識はありませんが、直感的にさえ、これらの命令が配列を構築する方法がわかりません。レジスタ値を一緒に追加しているように見えます。
結論:この静的配列のライフサイクル、特にそれを構築する「不足しているコード」がどこにあるのか、どうすればそれを確認できるのか、可能な限り知りたいです。または、ローダープロセスをデバッグ (ステップスルー) するにはどうすればよいですか? __start_libc エントリ (またはそのようなもの) でメインの前にブレークポイントを設定しようとしましたが、この領域で有望なものを特定できませんでした。
追加情報へのリンクは素晴らしいです!御時間ありがとうございます!