7

mach_vm_regionとと どのような状況で どちらを使用しますか はどう違いmach_vm_region_recurseますか?

関数の宣言の署名は次のとおりです。

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. プロセスのすべてのプライベート メモリを検索しますか?
4

1 に答える 1

4

違いは、このバージョンではサブマップvm_region_recurse_64の内容を確認できることです。このトピックの専門家のふりをするつもりはありませんが、私が見る限り、サブマップに遭遇する最も一般的な場所は、dyld キャッシュからフレームワークがマップされているメモリをトラバースするときです ( x86_64 Mac では=で始まります)。 )。SHARED_REGION_BASE_X86_640x00007FFF7000000

vm_region は、サブマップを単一のリージョンとして返すようです。

サブマップ内にプライベート マッピングが存在する可能性があると思います。

次に例を示します。

                       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これを報告する方法は次のとおりです。

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
于 2013-06-18T00:12:57.777 に答える