私は、ptraceを使って、read、write、openなどのシステムコールをトレースしています。 openのシステムコールがある場合、このシステムコールに渡された引数はuser_regs_structから取得できます。最初の引数はrdiレジスタに格納されます。 rdiの内容は、unsigned long long intです。これから文字列ファイル名を取得するにはどうすればいいですか?システムコールをオープンするために渡されたfoo.txt?Cでlinuxシステムコールに渡された引数を取り出す方法は?
0
A
答えて
0
open
に渡される引数(およびシステムコールが文字列を受け取るその他の場合)は、メモリ内の文字列の場所へのポインタです。
残念ながら、これらのポインタはデバッグのアドレス空間用であり、デバッガのアドレス空間から直接参照することはできません。
のドキュメントでは、一度に4文字(またはプラットフォームに応じて8バイト)の文字列を繰り返し取得することがあります。あなたは古いfakeroot-ng codeでこれを行う方法の例を見ることができます。そのコードはGPLの下にあるので、互換性のあるライセンスのコードを書かない限り、そのままコピーしないでください。
幸いにも、もっと簡単なデータを取得する方法があります。との方が高速です。移植性は低いですが、ptrace
コードを書いている場合は、通常は気にしません。
トレーサスレッドは、ファイル/proc/pid/mem
(、pidは、もちろん、debugeeの数値です)を開くことができます。 pidのptracerだけがそのファイルを開くことができます。
ファイルが開かれたら、希望のアドレスのオフセットでpread
(2)を取得し、debugeeのアドレススペースから直接データを取得できます。 read
インターフェイスは4バイトに限定されていないため、文字列の長さを推測し、そのバイト数を読み込み、NULLを終了して正確な文字列を知ることができます。
システムコールが少ないため、この方法は簡単ではなく、はるかに高速です。
関連する問題
- 1. Groovyスクリプトに渡された引数を取り込む方法は?
- 2. Linux上のシステムコール引数のタイプは?
- 3. Linuxで削除されたファイルを取り出す方法CentOS
- 4. フラスコテスト - Jinjaに渡された変数を取り出す方法は?
- 5. .exeに渡された引数をラップされた.batスクリプトに渡す方法
- 6. linuxシステムコールgetpeername C++
- 7. jqueryで渡された引数のIDを取得する方法は?
- 8. Cの関数引数から関数を取り出す方法は?
- 9. C#メインに渡された引数がありません
- 10. カスタムエントリポイント(C/C++)にコマンドライン引数を渡す方法はありますか?
- 11. node.jsの.ajaxリクエストで渡されたデータを取り出す方法は?
- 12. C#でWindowsサービスに引数を渡す方法は?
- 13. C++ Sprintf 2nd(format)引数で変数を渡す方法は?
- 14. javascriptを呼び出さずに関数に引数を渡す方法は?
- 15. ... mapActions(...)を使ってマップされた関数に引数を渡す方法は?
- 16. モックに送られた引数を取り込む方法は?
- 17. vagrantfile内で呼び出されるbashスクリプトに引数を渡す方法はありますか?
- 18. 呼び出されたスクリプトに引数を渡す
- 19. レンダリングされたメソッドの引数を渡す方法h:outputText?
- 20. Cライブラリ関数の引数を渡す引数の検出
- 21. 引数が渡されたときに関数が評価される方法
- 22. perlのサブルーチンに渡されたハッシュから配列を取り出す方法
- 23. C#で引数としてリストを渡す方法は?
- 24. backbone.jsのイベントオブジェクトにバインドされた関数に引数を渡す方法
- 25. Cで関数の引数としてENUMを渡す方法
- 26. Java - 引数で渡されたnull値を処理する方法は?
- 27. 引数から渡された関数からパラメータを引き出す
- 28. Cで引数を渡す
- 29. Objective-C変数をC++メソッドから取り出す方法は?
- 30. ColdBoxモジュールに渡されたイベント引数にアクセスする方法は?
これは、その文字列がプロセスのメモリ内のどこにあるかを示すポインタです。 –
はい、私は同じことを読むことができません。プロセスのアドレス空間を読み取る特別な方法はありますか?空文字列か<エラー:アクセスできません..>のいずれかが表示されます。 – Sagar
はい、 'ptrace'を使用します。 'PTRACE_PEEKTEXT'と' PTRACE_PEEKDATA'を探します。 –