非常に単純なELFプログラム(Linux x86)を逆アセンブルしています。
IDA PROソフトウェアでは、セクションにstdout
とstderr
があります。 そして、stdout
またはstderr
の値を設定するものは見つかりませんでした。 どのように動作しますか?
Сanstdout
とstderr
はnullですか?elf-loaderはstderrとstdoutのアドレスをどのように知っていますか
0
A
答えて
1
ですから、
.bss
開始からstdout
とstderr
にオフセットstdoutとstderrは常に.bssの
で同じメモリアドレスにする必要があります意味は、静的リンク時に決定されます。
.bss
の開始アドレスは、ASLR(ヒープ配置ランダム化)の対象です。したがって、与えられたバイナリの場合、stdout
のアドレスは実行ごとに変化する可能性があります。 IDA Proは.bssの中でこのアイテムを知っているか
それはことができる唯一の方法をstdoutまたはstderr
あるノウハウは、シンボルテーブルを介しです。
readelf -Ws ./a.out | egrep 'stdout|stderr'
nm ./a.out | egrep 'stdout|stderr'
nm -D ./a.out | egrep 'stdout|stderr'
更新:
が、どのようなシンボルテーブルが
を剥奪された場合に起こることを検討するには、2つのケースがあります。完全に静的リンクあなたからの出力でそれを見る必要があります、およびダイナミックリンク。完全に静的な場合
、stderr
へのすべての参照を完全に除去することができ、かつstderr
がどこにあるIDA Proはは知ることができません。動的にリンクされた場合に
、2つのシンボルテーブルが存在する:(nm
で表示)「通常」一方と(nm -D
で表示)動的一つ。 Stripはの正規シンボルテーブルを削除します(ダイナミックシンボルテーブルの削除は意味をなさないため、実行可能ファイルなしでは実行されません)。 IDA proはstderr
の動的シンボルテーブルエントリを使用して、そのシンボルがどこにあるかを指定できます。
関連する問題
- 1. stdout、stderr、stdout + stderrを同期して保存します
- 2. stdinとstdoutはプロセスとどのようにユニークになっていますか?
- 3. リダイレクトstdoutとstderr
- 4. ABAP StdoutとStderr
- 5. bashでstdout/stderrをどのように再定義できますか?
- 6. Pythonのサブプロセス(間違って?)sshのstderrとstdoutをマージする
- 7. プロセスのstdoutとstderrを同じハンドルにパイプするにはどうすればよいですか?
- 8. 子プロセスstdout/stderrをJavaのメインプロセスstdout/stderrにリダイレクトする方法は?
- 9. xavier_initializer()はアクティベーションをどのように知っていますか?
- 10. func2はどのようにコンテキストを知っていますか?
- 11. ksh stdoutとstderrを別のプロセスにリダイレクト
- 12. popen stderrとstdoutをパイプ
- 13. Raspbianのsystemdサービスからstdout/stderrを適切にリダイレクトするにはどうすればよいですか?
- 14. $ stdoutと$ stderrからのRuby同期ouput
- 15. WebサーバーはIPアドレスから正しいドメインをどのように知っていますか?
- 16. MavenCli - stdout、stderr
- 17. は、どのように知っていますか?
- 18. stdoutとstderrタスクファイルディレクトリを変更するにはどうすればよいですか?
- 19. バッチ - バッチスクリプト自体からstderrとstdoutをどのようにリダイレクトできますか? Unixシェルスクリプトで
- 20. nginxは私のサーバのURLアドレスをどのように知っていますか?
- 21. Chromeでは、javascriptコンソールの出力をstdout/stderrにどのように取得できますか
- 22. チェックボックスはテキストビューとの関連をどのように知っていますか
- 23. ルビーの$ stdout/$ stderrをトレースします
- 24. WindowsのSASからstdoutとstderrをキャプチャしますか?
- 25. バッチファイル内からstdoutとstderrをリダイレクト
- 26. 各スレッドのstdout/stderrをリダイレクト
- 27. CPUは周辺デバイスの物理アドレス範囲をどのように知っていますか?例えば
- 28. DHCPサーバーは自分のIPアドレスをどのように知っていますか?
- 29. python subprocess.Popen(コマンド、stderr = subprocess.PIPE、stdout = subprocess.PIPE)のstderrをキャプチャします。
- 30. サブプロセスstderrをstdoutにリダイレクト
stdoutとstderrは、cランタイムによって作成されたファイルハンドルです。あなたのプログラムは、システムがすでにそれを作成していると考えています。 http://www.gnu.org/software/libc/manual/html_node/Standard-Streams.html – SnakeDoc
stdoutとstderrは常に.bssの同じメモリアドレスにあるはずですか? – Bob5421