gpt4 book ai didi

macos - 在Mac OSX中获取进程基地址

转载 作者:行者123 更新时间:2023-12-04 06:06:59 25 4
gpt4 key购买 nike

我正在尝试使用task_for_pid/vm_read读取进程的内存。

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来查找)?

最佳答案

回答我自己的问题。我可以使用mach_vm_region_recurse来获得基址,如下所示。偏移量落在vmoffset中。如果还有另一种方法更“正确”,请立即发表评论!

#include <stdio.h>
#include <mach/mach_init.h>
#include <sys/sysctl.h>
#include <mach/mach_vm.h>

...

mach_port_name_t task;
vm_map_offset_t vmoffset;
vm_map_size_t vmsize;
uint32_t nesting_depth = 0;
struct vm_region_submap_info_64 vbr;
mach_msg_type_number_t vbrcount = 16;
kern_return_t kr;

if ((kr = mach_vm_region_recurse(task, &vmoffset, &vmsize,
&nesting_depth,
(vm_region_recurse_info_t)&vbr,
&vbrcount)) != KERN_SUCCESS)
{
printf("FAIL");
}

关于macos - 在Mac OSX中获取进程基地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10301542/

25 4 0
文章推荐: visual-studio - VS2010 中没有 System.Web
文章推荐: c - C fork() 和 wait() 调用如何工作?
文章推荐: select -