12

私はクローズドソースのサードパーティプログラムを持っています。

  • プログラムに割り当てられているメモリを知る
  • そのメモリにアクセスします (読み取り専用で問題ありません)

vmmap(1)、heap(1)、leaks(1) などのユーティリティは、必要なものと同様の機能を備えているようですが、そのソース (OS X バージョン) がどこにも見つからず、それらがどのように機能するのかわかりません仕事。できれば、これはすべてユーザー空間で実行され、場合によってはルートとして実行されます。回避できるのであれば、メモリ保護をバイパスする目的でカーネルコードを記述したくありません。

読み取りたいアドレスを shmat(2) の 2 番目の引数として渡す共有メモリを使用しようとしましたが、これは最終的に失敗し (おそらく意図した使用方法や悪い習慣ではありませんでした)、それでも方法がありませんでした。とにかく、探しているメモリを特定します(メモリを所有しているプログラムは、そのアドレスを私に報告する必要がありました)。

特定のプログラムのメモリ保護を無効にして、別のプロセスに割り当てられたメモリを読み書きしようとしたときにセグメンテーション違反が発生しないようにする方法はありますか? バグがシステム全体を深刻に破損させないようにするより良い方法はありますか?

これはどのように達成されますか?

4

2 に答える 2

4

基本的に、この男は正しいです。

この本に付属しているソースコードをダウンロードして、実際の実装については例8-16のvm_rw_master.cを参照してください。

ドキュメントについては、 http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/を参照してください。少し古く、疑わしいほど正しいですが、入手可能な最高のものです。

編集:また、 http: //lightbulbone.com/2011/05/dumping-process-memory-on-mac-os-x/を参照してください(読み込もうとしているメモリを所有するタスクは、読み取りを行おうとするプロセスの子である場合は、適切な権限が必要です。)

編集:また、承認の良い例については、 http: //os-tres.net/blog/2010/02/17/mac-os-x-and-task-for-pid-mach-call/を参照してください。

于 2012-06-11T06:50:47.217 に答える
3

私は OS X マシンにアクセスできませんが、これはあなたがやろうとしていることと非常によく似ています。

OS Xで他のプロセスのメモリを読んでいますか?

機能しないリンクのアーカイブは次のとおりです。

http://web.archive.org/web/20090627062246/http://www.matasano.com/log/1100/what-ive-been-doing-on-my-summer-vacation-or-it-has- to-work-otherwise-gdb-wouldnt/

于 2012-06-11T03:59:28.917 に答える