task_for_pid
/vm_read
を使用してプロセスのメモリを読み込もうとしています。Mac OSXでプロセスベースアドレスを取得する
uint32_t sz;
pointer_t buf;
task_t task;
pid_t pid = 9484;
kern_return_t error = task_for_pid(current_task(), pid, &task);
vm_read(task, 0x10e448000, 2048, &buf, &sz);
この場合、最初の2048バイトを読み取りました。
これは、gdb "info shared"(この場合は0x10e448000
)を使用して見つけることができるプロセスのベースアドレスを知っているときに機能しますが、実行時にベースアドレスを調べるにはどうすればgdbで)?
非常に文書化されていない機能のための非常に便利なスニペット。 – Matt
コマンドラインから、これは便利です: sample $ pid 1 2>/dev/null | grep "Load Address" – sdsykes