C语言 内存Map库osx的文件名

omvjsjqw  于 2022-12-11  发布在  其他
关注(0)|答案(2)|浏览(185)

我需要得到当前应用程序的所有内存Map库的文件名。目前我正在通过vm_region浏览所有Map库。遗憾的是,它没有提供当前区域的文件名信息。有没有办法在c中得到这些信息,而不用在vmmap上执行popen?

xtfmy6hx

xtfmy6hx1#

vm0i2vca

vm0i2vca2#

下面介绍如何使用libproc.h和proc_pidinfo()列出mmmap文件:

#include <stdio.h>
#include <stdlib.h>
#include <libproc.h>

int main (int argc, char **argv) {
    if (argc < 2) exit(1);
    int pid = atoi(argv[1]);

    struct proc_regionwithpathinfo prwpi;
    uint64_t address = 0;
    uint64_t last_ino = 0;
    while (1) {
        int retval = proc_pidinfo(pid, PROC_PIDREGIONPATHINFO, address, &prwpi, sizeof(prwpi));
        if (retval <= 0) {
            break;
        }
        else if (retval < sizeof(prwpi)) {
            perror("proc_pidinfo");
            exit(1);
        }
        char *path = prwpi.prp_vip.vip_path;
        uint64_t ino = prwpi.prp_vip.vip_vi.vi_stat.vst_ino;

        if (path && path[0] && ino != last_ino) {
            printf("path is %s\n", path);
            last_ino = ino;
        }
        address = prwpi.prp_prinfo.pri_address + prwpi.prp_prinfo.pri_size;
    }
    return 0;
}

相关问题