2013-04-16 36 views
1

我做了一個使用task_for_pid()和mach_vm_write()寫入進程內存的示例。OSX上的內存更改

task_for_pid(mach_task_self(), pid, &target_task); 
mach_vm_write(target_task, address, '?', local_size); 

如果某些進程在我的應用程序的任務中向指定地址寫入數據,我該如何監視內存的變化?

回答

1

你不能。使用mach_vm_write(如在Windows中使用WriteProcessMemory或在Linux中使用ptrace(2))不會爲寫入過程提供通知。您的唯一選擇是:

A)在寫作和受害者任務之間使用IPC對象 B)在受害者任務中產生一個線程以監視該區域內存的變化。這具有連續輪詢的明顯缺點。雖然更高級的解決方案是在你正在寫的任務中創建一個遠程線程(你可以,因爲你現在已經獲得了任務端口),並且讓它做一些事情。