首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mach_vm_region对mach_vm_region_recurse

mach_vm_region对mach_vm_region_recurse
EN

Stack Overflow用户
提问于 2013-06-10 14:12:05
回答 1查看 3K关注 0票数 7

mach_vm_regionmach_vm_region_recurse有什么区别,在什么情况下您会使用哪种情况?

这些职能声明的签字如下:

代码语言:javascript
复制
kern_return_t mach_vm_region
(
    vm_map_t target_task,
    mach_vm_address_t *address,
    mach_vm_size_t *size,
    vm_region_flavor_t flavor,
    vm_region_info_t info,
    mach_msg_type_number_t *infoCnt,
    mach_port_t *object_name
);
kern_return_t mach_vm_region_recurse
(
    vm_map_t target_task,
    mach_vm_address_t *address,
    mach_vm_size_t *size,
    natural_t *nesting_depth,
    vm_region_recurse_info_t info,
    mach_msg_type_number_t *infoCnt
);

如果我想用哪种功能..。

  1. 查找进程的所有有效内存地址?
  2. 找到一个进程的所有私有内存?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-18 00:12:57

区别在于,vm_region_recurse_64版本允许您查看子映射的内容。我不会假装是这个主题的专家,但据我所见,您遇到子映射的最常见的地方是遍历从dyld缓存映射框架的内存(从SHARED_REGION_BASE_X86_64 = 0x00007FFF7000000开始,在x86_64 macs上)。

vm_region似乎将子映射返回为单个区域。

我认为子映射中可以有私有映射。

下面是一个例子:

代码语言:javascript
复制
                       00007fff70000000-00007fff76c00000 vm_region
                       00007fff70000000-00007fff76c00000 vm_region_recurse_64    (depth=0, is_submap == TRUE)
                       00007fff7695b000-00007fff76a00000 vm_region_recurse_64 #1 (depth=1, is_submap == FALSE)
                       00007fff76a00000-00007fff76c00000 vm_region_recurse_64 #2 (depth=1, is_submap == FALSE)

下面是vmstat -interleaved -v报告的方式:

代码语言:javascript
复制
map                    00007fff70000000-00007fff76c00000 r--/rwx process-only submap
unused split lib       00007fff7695b000-00007fff76999000 system shared library region not used by this process
__DATA                 00007fff76999000-00007fff7699a000 /usr/lib/system/libcompiler_rt.dylib
unused split lib       00007fff7699a000-00007fff769a2000 system shared library region not used by this process
__DATA                 00007fff769a2000-00007fff769a3000 /usr/lib/system/libsystem_notify.dylib
unused split lib       00007fff769a3000-00007fff76a00000 system shared library region not used by this process
unused split lib       00007fff76a00000-00007fff76c00000 system shared library region not used by this process
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17025919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档