ptraceは、エントリ/終了のシステムコール時にレジスタとメモリのデータを取得できます。しかし、もしlinux syscallハンドラがいくつかのメモリを変更した場合、スタック内のいくつかの場所が含まれています。どのメモリが変更されたかを知るにはどうすればいいですか?ptrace syscallで変更されたメモリを取得する
0
A
答えて
0
できません。たとえばstrace(これはptraceを使用します)はほとんどの(すべて?)システムコールのセマンティクスを認識し、変更されたメモリを表示できます。
たとえば、syscall-numberが0の場合、straceはread()
-syscallが呼び出され、カーネルが2番目のパラメータで指定されたアドレスに書き込むことを認識します。そこに書き込まれたバイト数は、システムコールの戻り値と同じです。
ここでは、これらのメモリ位置の内容をPTRACE_PEEK*
と読んで表示することができます。
しかし、未知のまたはそれほど厳密でないセマンティクス(例えば、提案されたシステムコールwrite_to_random_memory_location()
)を伴うカスタムシステムコールに関しては、 ptrace()
で一般的に(カーネルからもユーザー空間からも)メモリの変更を判断することはできません。
達成する必要があるかどうかに応じて、一般的な解決策は、ある種の仮想化(たとえば、ユーザー空間でのvalgrindの使用)のみを利用し、すべてのメモリアクセスをシミュレート/監視することができます。
関連する問題
- 1. python couchdbでフィルタリングされた変更を取得するには
- 2. datepickerで変更された日付を取得する方法
- 3. std :: shared_ptr(unique_ptr)でガードされたメモリを変更する方法
- 4. Jqueryで変更されたセレクタクラスが取得されない
- 5. gitリポジトリで変更されたプロジェクトを取得します。
- 6. 変更された範囲のセルを取得する
- 7. DocumentListenerから変更されたテキストを取得する
- 8. ステータスが変更されたレコードを取得するSQLクエリ
- 9. 最近変更されたファイルを取得する方法
- 10. 変更された行番号を取得する
- 11. アイリスカラーピッカーから変更されたカラーコードを取得する方法
- 12. git diff、変更された文字だけを取得する
- 13. Windowsにlinux ptrace syscallのようなものがありますか?
- 14. Windows XP/2003にlinux ptrace syscallのようなものがありますか?
- 15. jbpmワークベンチで変更されたプロセス変数を取得する方法
- 16. mongodbで変更されたドキュメントの通知を取得
- 17. ADO.NETのクエリで変更されるSQL変数を取得
- 18. フォークされたプロセスでメモリのアクセス許可を設定する
- 19. ダイアグラムの変更後に更新されたモデルを取得する方法は?
- 20. iOS UIWebViewでiOSトラッキングURLが変更され、返されたデータを取得
- 21. 各変更された値を取得する関数からの変数
- 22. C++でレジストリキーが作成/変更された日付を取得する
- 23. Perlの変更日でソートされたファイルのリストを取得する
- 24. PHPで変更されたファイルの内容を取得する方法
- 25. hibernate enverse:関連フィールドで変更された値を取得する方法
- 26. Firebaseデータベースで変更された値だけを取得するには?
- 27. PHPで最後に変更されたファイルを取得するには?
- 28. JPA NamedQueryが変更されたエンティティへの変更を取得しない
- 29. メモリの値が無許可で変更されました
- 30. 取得:コンテンツタイプが変更されるのはなぜですか?