6#include <mach/mach_vm.h>
16static mach_port_name_t target;
17static vm_offset_t target_page_base;
18static vm_offset_t local_page;
19static mach_msg_type_number_t local_size;
21static void fpm_mach_vm_deallocate(
void)
24 mach_vm_deallocate(mach_task_self(), local_page, local_size);
31static int fpm_mach_vm_read_page(vm_offset_t page)
35 kr = mach_vm_read(target, page,
fpm_pagesize, &local_page, &local_size);
36 if (kr != KERN_SUCCESS) {
37 zlog(
ZLOG_ERROR,
"failed to read vm page: mach_vm_read(): %s (%d)", mach_error_string(kr), kr);
58 kr = task_for_pid(mach_task_self(), pid, &target);
59 if (kr != KERN_SUCCESS) {
62 if (kr == KERN_FAILURE) {
63 msg =
" It seems that master process does not have enough privileges to trace processes.";
65 zlog(
ZLOG_ERROR,
"task_for_pid() failed: %s (%d)%s", mach_error_string(kr), kr,
msg);
74 fpm_mach_vm_deallocate();
83 vm_offset_t base = (uintptr_t) (
addr) -
offset;
85 if (base != target_page_base) {
86 fpm_mach_vm_deallocate();
87 if (0 > fpm_mach_vm_read_page(base)) {
int fpm_pctl_kill(pid_t pid, int how)
int fpm_trace_signal(pid_t pid)
int fpm_trace_close(pid_t pid)
int fpm_trace_get_long(long addr, long *data)
int fpm_trace_ready(pid_t pid)