Linux系统用户态根据虚拟地址获取物理地址的方式

本文介绍了如何在Linux系统中,利用proc文件系统中的pagemap节点,根据用户态进程的虚拟地址获取物理地址。这种方法无需修改内核,而是通过解析页表结构来实现。文章详细分析了pagemap文件的结构和内容,以及通过内核函数进行页表反查的过程。此外,还讨论了针对设备IO映射(如PCI BAR)时的特殊情况,其中VM_PFNMAP标志导致无法直接获取物理地址的问题,并提到了内核提供的follow_pfn API作为解决途径。
摘要由CSDN通过智能技术生成

之前做项目的时候,也会遇到过根据页表,由虚拟地址翻译物理地址的需求,一般的做法是HACK内核,在内核中加入HACK代码,思路无非就是通过页表进行转换,但是现在有了一种新的方式,这种方式下,不需要HACK内核,也不需要重新编译内核,便能够根据进程的虚拟地址,得到它的物理地址,下面展开介绍。

原理非常简单,依赖于 proc 文件系统的几个节点:

/proc/$pid/pagemap
/proc/kpagecount
/proc/kpageflags

准确的说,只依赖第一个就够了,这个节点的逻辑是现在内核源码文件./fs/proc/task_mmu.c中,pagemap每8个字节为一组,描述了一个struct page 对应的结构信息,这里面就包含了它的PNF物理页框号。

测试代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <errno.h>
#include <stdint.h>
#include <string.h>

#define PAGEMAP_ENTRY 8
#define GET_BIT(X,Y) (X & ((uint64_t)1<<Y)) >> Y
#define GET_PFN(X) X & 0x7FFFFFFFFFFFFF

const int __endian_bit = 1;
#define is_bigendian() ( (*(char*)&__endian_bit) == 0 )

int i, c, pid, status;
unsigned long virt_addr; 
uint64_t read_val, file_offset, page_size;
char path_buf [0x100] = {};
FILE * f;
char *end;

int read_pagemap(char * path_buf, unsigned long virt_addr);

int main(int argc, char ** argv){
    if(argc!=3){
        printf("Argument number is not correct!\n pagemap PID VIRTUAL_ADDRESS\n");
        return -1;
    }
    if(!memcmp(argv[1],"self",sizeof("self"))){
        sprintf(path_buf, "/proc/self/pagemap");
        pid = -1;
    }
    else{
        pid = strtol(argv[1],&end, 10);
        if (end == argv[1] || *end != '\0' || pid<=0){ 
            printf("PID must be a positive number or 'self'\n");
            return -1;
        }
    }
    virt_addr = strtoll(argv[2], NULL, 16);
    if(pid!=-1)
        sprintf(path_buf, "/proc/%u/pagemap", pid);

    page_size = getpagesize();
    read_pagemap(path_buf, virt_addr);
    return 0;
}

int read_pagemap(char * path_buf, unsigned long virt_addr){
    printf("Big endian? %d\n", is_bigendian());
    f = fopen(path_buf, "rb");
    if(!f){
        printf("Error! Cannot open %s\n", path_buf);
        return -1;
    }

    //Shifting by virt-addr-offset number of bytes
    //and multiplying by the size of an address (the size of an entry in pagemap file)
    file_offset = virt_addr / page_size * PAGEMAP_ENTRY;
    printf("Vaddr: 0x%lx, Page_size: %ld, Entry_size: %d\n", virt_addr, page_size, PAGEMAP_ENTRY);
    printf("Reading %s at 0x%llx\n", path_buf, (unsigned long long) file_offset);
    status = fseek(f, file_offset, SEEK_SET);
    if(status){
        perror("Failed to do fseek!");
        return -1;
    }
    errno = 0;
    read_val = 0;
    unsigned char c_buf[PAGEMAP_ENTRY];
    for(i=0; i < PAGEMAP_ENTRY; i++){
        c = getc(f);
        if(c==EOF){
            printf("\nReached end of the file\n");
            return 0;
        }
        if(is_bigendian())
            c_buf[i] = c;
        else
            c_buf[PAGEMAP_ENTRY - i - 1] = c;
        printf("[%d]0x%x ", i, c);
    }
    for(i=0; i < PAGEMAP_ENTRY; i++){
        //printf("%d ",c_buf[i]);
        read_val = (read_val << 8) + c_buf[i];
    }
    printf("\n");
    printf("Result: 0x%llx\n", (unsigned long long) read_val);
    if(GET_BIT(read_val, 63)) {
        uint64_t pfn = GET_PFN(read_val);
        printf("PFN: 0x%lx (0x%lx)\n", pfn, pfn * page_size + virt_addr % page_size);
    } else
        printf("Page not present\n");
    if(GET_BIT(read_val, 62))
        printf("Page swapped\n");
    fclose(f);
    return 0;
}

编译:

czl@czl-RedmiBook-14:~/Workspace/memory$ gcc page.c -o virt2phy
czl@czl-RedmiBook-14:~/Workspace/memory$ 

验证,思路是找两个用户态进程,根据它们的地址空间,找到libc.so的运行地址,然后用上面的工具得到libc.so的物理地址,之所以选择libc.so是因为libc.so是所有的进程共享,它们应该具有相同的物理地址,即便虚拟地址不同。

选择进程1:

czl@czl-RedmiBook-14:~/Workspace/memory$ sudo cat /proc/1/maps
[sudo] password for czl: 
559ed662f000-559ed677f000 r-xp 00000000 08:08 1181921                    /lib/systemd/systemd
559ed697e000-559ed69b9000 r--p 0014f000 08:08 1181921                    /lib/systemd/systemd
559ed69b9000-559ed69ba000 rw-p 0018a000 08:08 1181921                    /lib/systemd/systemd
559ed74fe000-559ed76e0000 rw-p 00000000 00:00 0                          [heap]
7f18fc000000-7f18fc021000 rw-p 00000000 00:00 0 
7f18fc021000-7f1900000000 ---p 00000000 00:00 0 
7f1904000000-7f1904021000 rw-p 00000000 00:00 0 
7f1904021000-7f1908000000 ---p 00000000 00:00 0 
7f19082dd000-7f19082de000 ---p 00000000 00:00 0 
7f19082de000-7f1908ade000 rw-p 00000000 00:00 0 
7f1908ade000-7f1908adf000 ---p 00000000 00:00 0 
7f1908adf000-7f19092df000 rw-p 00000000 00:00 0 
7f19092df000-7f190947c000 r-xp 00000000 08:08 1184965                    /lib/x86_64-linux-gnu/libm-2.27.so
7f190947c000-7f190967b000 ---p 0019d000 08:08 1184965                    /lib/x86_64-linux-gnu/libm-2.27.so
7f190967b000-7f190967c000 r--p 0019c000 08:08 1184965                    /lib/x86_64-linux-gnu/libm-2.27.so
7f190967c000-7f190967d000 rw-p 0019d000 08:08 1184965                    /lib/x86_64-linux-gnu/libm-2.27.so
7f190967d000-7f190969a000 r-xp 00000000 08:08 1180247                    /lib/x86_64-linux-gnu/libudev.so.1.6.9
7f190969a000-7f1909899000 ---p 0001d000 08:08 1180247                    /lib/x86_64-linux-gnu/libudev.so.1.6.9
7f1909899000-7f190989a000 r--p 0001c000 08:08 1180247                    /lib/x86_64-linux-gnu/libudev.so.1.6.9
7f190989a000-7f190989b000 rw-p 0001d000 08:08 1180247                    /lib/x86_64-linux-gnu/libudev.so.1.6.9
7f190989b000-7f19098af000 r-xp 00000000 08:08 1185131                    /lib/x86_64-linux-gnu/libgpg-error.so.0.22.0
7f19098af000-7f1909aae000 ---p 00014000 08:08 1185131                    /lib/x86_64-linux-gnu/libgpg-error.so.0.22.0
7f1909aae000-7f1909aaf000 r--p 00013000 08:08 1185131                    /lib/x86_64-linux-gnu/libgpg-error.so.0.22.0
7f1909aaf000-7f1909ab0000 rw-p 00014000 08:08 1185131                    /lib/x86_64-linux-gnu/libgpg-error.so.0.22.0
7f1909ab0000-7f1909aba000 r-xp 00000000 08:08 1180918                    /lib/x86_64-linux-gnu/libjson-c.so.3.0.1
7f1909aba000-7f1909cb9000 ---p 0000a000 08:08 1180918                    /lib/x86_64-linux-gnu/libjson-c.so.3.0.1
7f1909cb9000-7f1909cba000 r--p 00009000 08:08 1180918                    /lib/x86_64-linux-gnu/libjson-c.so.3.0.1
7f1909cba000-7f1909cbb000 rw-p 0000a000 08:08 1180918                    /lib/x86_64-linux-gnu/libjson-c.so.3.0.1
7f1909cbb000-7f1909cc3000 r-xp 00000000 08:08 794506                     /usr/lib/x86_64-linux-gnu/libargon2.so.0
7f1909cc3000-7f1909ec2000 ---p 00008000 08:08 794506                     /usr/lib/x86_64-linux-gnu/libargon2.so.0
7f1909ec2000-7f1909ec3000 r--p 00007000 08:08 794506                     /usr/lib/x86_64-linux-gnu/libargon2.so.0
7f1909ec3000-7f1909ec4000 rw-p 00008000 08:08 794506                     /usr/lib/x86_64-linux-gnu/libargon2.so.0
7f1909ec4000-7f1909f2a000 r-xp 00000000 08:08 1185112                    /lib/x86_64-linux-gnu/libdevmapper.so.1.02.1
7f1909f2a000-7f190a129000 ---p 00066000 08:08 1185112                    /lib/x86_64-linux-gnu/libdevmapper.so.1.02.1
7f190a129000-7f190a12a000 r--p 00065000 08:08 1185112                    /lib/x86_64-linux-gnu/libdevmapper.so.1.02.1
7f190a12a000-7f190a12e000 rw-p 00066000 08:08 1185112                    /lib/x86_64-linux-gnu/libdevmapper.so.1.02.1
7f190a12e000-7f190a12f000 rw-p 00000000 00:00 0 
7f190a12f000-7f190a133000 r-xp 00000000 08:08 1185078                    /lib/x86_64-linux-gnu/libattr.so.1.1.0
7f190a133000-7f190a332000 ---p 00004000 08:08 1185078                    /lib/x86_64-linux-gnu/libattr.so.1.1.0
7f190a332000-7f190a333000 r--p 00003000 08:08 1185078                    /lib/x86_64-linux-gnu/libattr.so.1.1.0
7f190a333000-7f190a334000 rw-p 00004000 08:08 1185078                    /lib/x86_64-linux-gnu/libattr.so.1.1.0
7f190a334000-7f190a338000 r-xp 00000000 08:08 1185093                    /lib/x86_64-linux-gnu/libcap-ng.so.0.0.0
7f190a338000-7f190a537000 ---p 00004000 08:08 1185093                    /lib/x86_64-linux-gnu/libcap-ng.so.0.0.0
7f190a537000-7f190a538000 r--p 00003000 08:08 1185093                    /lib/x86_64-linux-gnu/libcap-ng.so.0.0.0
7f190a538000-7f190a539000 rw-p 00004000 08:08 1185093                    /lib/x86_64-linux-gnu/libcap-ng.so.0.0.0
7f190a539000-7f190a53f000 r-xp 00000000 08:08 1180927                    /lib/x86_64-linux-gnu/libuuid.so.1.3.0
7f190a53f000-7f190a73e000 ---p 00006000 08:08 1180927                    /lib/x86_64-linux-gnu/libuuid.so.1.3.0
7f190a73e000-7f190a73f000 r--p 00005000 08:08 1180927                    /lib/x86_64-linux-gnu/libuuid.so.1.3.0
7f190a73f000-7f190a740000 rw-p 00006000 08:08 1180927                    /lib/x86_64-linux-gnu/libuuid.so.1.3.0
7f190a740000-7f190a743000 r-xp 00000000 08:08 1181890                    /lib/x86_64-linux-gnu/libdl-2.27.so
7f190a743000-7f190a942000 ---p 00003000 08:08 1181890                    /lib/x86_64-linux-gnu/libdl-2.27.so
7f190a942000-7f190a943000 r--p 00002000 08:08 1181890                    /lib/x86_64-linux-gnu/libdl-2.27.so
7f190a943000-7f190a944000 rw-p 00003000 08:08 1181890                    /lib/x86_64-linux-gnu/libdl-2.27.so
7f190a944000-7f190a9b4000 r-xp 00000000 08:08 1185212                    /lib/x86_64-linux-gnu/libpcre.so.3.13.3
7f190a9b4000-7f190abb4000 ---p 00070000 08:08 1185212                    /lib/x86_64-linux-gnu/libpcre.so.3.13.3
7f190abb4000-7f190abb5000 r--p 00070000 08:08 1185212                    /lib/x86_64-linux-gnu/libpcre.so.3.13.3
7f190abb5000-7f190abb6000 rw-p 00071000 08:08 1185212                    /lib/x86_64-linux-gnu/libpcre.so.3.13.3
7f190abb6000-7f190abd0000 r-xp 00000000 08:08 1185050                    /lib/x86_64-linux-gnu/libpthread-2.27.so
7f190abd0000-7f190adcf000 ---p 0001a000 08:08 1185050                    /lib/x86_64-linux-gnu/libpthread-2.27.so
7f190adcf000-7f190add0000 r--p 00019000 08:08 1185050                    /lib/x86_64-linux-gnu/libpthread-2.27.so
7f190add0000-7f190add1000 rw-p 0001a000 08:08 1185050                    /lib/x86_64-linux-gnu/libpthread-2.27.so
7f190add1000-7f190add5000 rw-p 00000000 00:00 0 
7f190add5000-7f190adf0000 r-xp 00000000 08:08 794419                     /usr/lib/x86_64-linux-gnu/liblz4.so.1.7.1
7f190adf0000-7f190afef000 ---p 0001b000 08:08 794419                     /usr/lib/x86_64-linux-gnu/liblz4.so.1.7.1
7f190afef000-7f190aff0000 r--p 0001a000 08:08 794419                     /usr/lib/x86_64-linux-gnu/liblz4.so.1.7.1
7f190aff0000-7f190aff1000 rw-p 0001b000 08:08 794419                     /usr/lib/x86_64-linux-gnu/liblz4.so.1.7.1
7f190aff1000-7f190b015000 r-xp 00000000 08:08 1185150                    /lib/x86_64-linux-gnu/liblzma.so.5.2.2
7f190b015000-7f190b215000 ---p 00024000 08:08 1185150                    /lib/x86_64-linux-gnu/liblzma.so.5.2.2
7f190b215000-7f190b216000 r--p 00024000 08:08 1185150                    /lib/x86_64-linux-gnu/liblzma.so.5.2.2
7f190b216000-7f190b217000 rw-p 00025000 08:08 1185150                    /lib/x86_64-linux-gnu/liblzma.so.5.2.2
7f190b217000-7f190b249000 r-xp 00000000 08:08 1185137                    /lib/x86_64-linux-gnu/libidn.so.11.6.16
7f190b249000-7f190b448000 ---p 00032000 08:08 1185137                    /lib/x86_64-linux-gnu/libidn.so.11.6.16
7f190b448000-7f190b449000 r--p 00031000 08:08 1185137                    /lib/x86_64-linux-gnu/libidn.so.11.6.16
7f190b449000-7f190b44a000 rw-p 00032000 08:08 1185137                    /lib/x86_64-linux-gnu/libidn.so.11.6.16
7f190b44a000-7f190b450000 r-xp 00000000 08:08 795074                     /usr/lib/x86_64-linux-gnu/libip4tc.so.0.1.0
7f190b450000-7f190b64f000 ---p 00006000 08:08 795074                     /usr/lib/x86_64-linux-gnu/libip4tc.so.0.1.0
7f190b64f000-7f190b650000 r--p 00005000 08:08 795074                     /usr/lib/x86_64-linux-gnu/libip4tc.so.0.1.0
7f190b650000-7f190b651000 rw-p 00006000 08:08 795074                     /usr/lib/x86_64-linux-gnu/libip4tc.so.0.1.0
7f190b651000-7f190b765000 r-xp 00000000 08:08 1185129                    /lib/x86_64-linux-gnu/libgcrypt.so.20.2.1
7f190b765000-7f190b965000 ---p 00114000 08:08 1185129                    /lib/x86_64-linux-gnu/libgcrypt.so.20.2.1
7f190b965000-7f190b967000 r--p 00114000 08:08 1185129                    /lib/x86_64-linux-gnu/libgcrypt.so.20.2.1
7f190b967000-7f190b96c000 rw-p 00116000 08:08 1185129                    /lib/x86_64-linux-gnu/libgcrypt.so.20.2.1
7f190b96c000-7f190b96d000 rw-p 00000000 00:00 0 
7f190b96d000-7f190b971000 r-xp 00000000 08:08 1185095                    /lib/x86_64-linux-gnu/libcap.so.2.25
7f190b971000-7f190bb71000 ---p 00004000 08:08 1185095                    /lib/x86_64-linux-gnu/libcap.so.2.25
7f190bb71000-7f190bb72000 r--p 00004000 08:08 1185095                    /lib/x86_64-linux-gnu/libcap.so.2.25
7f190bb72000-7f190bb73000 rw-p 00005000 08:08 1185095                    /lib/x86_64-linux-gnu/libcap.so.2.25
7f190bb73000-7f190bbbc000 r-xp 00000000 08:08 1185103                    /lib/x86_64-linux-gnu/libcryptsetup.so.12.2.0
7f190bbbc000-7f190bdbc000 ---p 00049000 08:08 1185103                    /lib/x86_64-linux-gnu/libcryptsetup.so.12.2.0
7f190bdbc000-7f190bdbd000 r--p 00049000 08:08 1185103                    /lib/x86_64-linux-gnu/libcryptsetup.so.12.2.0
7f190bdbd000-7f190bdbf000 rw-p 0004a000 08:08 1185103                    /lib/x86_64-linux-gnu/libcryptsetup.so.12.2.0
7f190bdbf000-7f190bdc6000 r-xp 00000000 08:08 1185068                    /lib/x86_64-linux-gnu/libacl.so.1.1.0
7f190bdc6000-7f190bfc5000 ---p 00007000 08:08 1185068                    /lib/x86_64-linux-gnu/libacl.so.1.1.0
7f190bfc5000-7f190bfc6000 r--p 00006000 08:08 1185068                    /lib/x86_64-linux-gnu/libacl.so.1.1.0
7f190bfc6000-7f190bfc7000 rw-p 00007000 08:08 1185068                    /lib/x86_64-linux-gnu/libacl.so.1.1.0
7f190bfc7000-7f190bfd6000 r-xp 00000000 08:08 1185072                    /lib/x86_64-linux-gnu/libapparmor.so.1.4.2
7f190bfd6000-7f190c1d5000 ---p 0000f000 08:08 1185072                    /lib/x86_64-linux-gnu/libapparmor.so.1.4.2
7f190c1d5000-7f190c1d6000 r--p 0000e000 08:08 1185072                    /lib/x86_64-linux-gnu/libapparmor.so.1.4.2
7f190c1d6000-7f190c1d7000 rw-p 0000f000 08:08 1185072                    /lib/x86_64-linux-gnu/libapparmor.so.1.4.2
7f190c1d7000-7f190c1ed000 r-xp 00000000 08:08 1185146                    /lib/x86_64-linux-gnu/libkmod.so.2.3.2
7f190c1ed000-7f190c3ec000 ---p 00016000 08:08 1185146                    /lib/x86_64-linux-gnu/libkmod.so.2.3.2
7f190c3ec000-7f190c3ed000 r--p 00015000 08:08 1185146                    /lib/x86_64-linux-gnu/libkmod.so.2.3.2
7f190c3ed000-7f190c3ee000 rw-p 00016000 08:08 1185146                    /lib/x86_64-linux-gnu/libkmod.so.2.3.2
7f190c3ee000-7f190c40b000 r-xp 00000000 08:08 1185080                    /lib/x86_64-linux-gnu/libaudit.so.1.0.0
7f190c40b000-7f190c60b000 ---p 0001d000 08:08 1185080                    /lib/x86_64-linux-gnu/libaudit.so.1.0.0
7f190c60b000-7f190c60c000 r--p 0001d000 08:08 1185080                    /lib/x86_64-linux-gnu/libaudit.so.1.0.0
7f190c60c000-7f190c60d000 rw-p 0001e000 08:08 1185080                    /lib/x86_64-linux-gnu/libaudit.so.1.0.0
7f190c60d000-7f190c617000 rw-p 00000000 00:00 0 
7f190c617000-7f190c624000 r-xp 00000000 08:08 1185199                    /lib/x86_64-linux-gnu/libpam.so.0.83.1
7f190c624000-7f190c823000 ---p 0000d000 08:08 1185199                    /lib/x86_64-linux-gnu/libpam.so.0.83.1
7f190c823000-7f190c824000 r--p 0000c000 08:08 1185199                    /lib/x86_64-linux-gnu/libpam.so.0.83.1
7f190c824000-7f190c825000 rw-p 0000d000 08:08 1185199                    /lib/x86_64-linux-gnu/libpam.so.0.83.1
7f190c825000-7f190c86c000 r-xp 00000000 08:08 1180910                    /lib/x86_64-linux-gnu/libblkid.so.1.1.0
7f190c86c000-7f190ca6c000 ---p 00047000 08:08 1180910                    /lib/x86_64-linux-gnu/libblkid.so.1.1.0
7f190ca6c000-7f190ca70000 r--p 00047000 08:08 1180910                    /lib/x86_64-linux-gnu/libblkid.so.1.1.0
7f190ca70000-7f190ca71000 rw-p 0004b000 08:08 1180910                    /lib/x86_64-linux-gnu/libblkid.so.1.1.0
7f190ca71000-7f190ca72000 rw-p 00000000 00:00 0 
7f190ca72000-7f190cac3000 r-xp 00000000 08:08 1180920                    /lib/x86_64-linux-gnu/libmount.so.1.1.0
7f190cac3000-7f190ccc2000 ---p 00051000 08:08 1180920                    /lib/x86_64-linux-gnu/libmount.so.1.1.0
7f190ccc2000-7f190ccc4000 r--p 00050000 08:08 1180920                    /lib/x86_64-linux-gnu/libmount.so.1.1.0
7f190ccc4000-7f190ccc5000 rw-p 00052000 08:08 1180920                    /lib/x86_64-linux-gnu/libmount.so.1.1.0
7f190ccc5000-7f190ccc6000 rw-p 00000000 00:00 0 
7f190ccc6000-7f190cceb000 r-xp 00000000 08:08 1185235                    /lib/x86_64-linux-gnu/libselinux.so.1
7f190cceb000-7f190ceea000 ---p 00025000 08:08 1185235                    /lib/x86_64-linux-gnu/libselinux.so.1
7f190ceea000-7f190ceeb000 r--p 00024000 08:08 1185235                    /lib/x86_64-linux-gnu/libselinux.so.1
7f190ceeb000-7f190ceec000 rw-p 00025000 08:08 1185235                    /lib/x86_64-linux-gnu/libselinux.so.1
7f190ceec000-7f190ceee000 rw-p 00000000 00:00 0 
7f190ceee000-7f190cf21000 r-xp 00000000 08:08 1180923                    /lib/x86_64-linux-gnu/libseccomp.so.2.4.3
7f190cf21000-7f190d120000 ---p 00033000 08:08 1180923                    /lib/x86_64-linux-gnu/libseccomp.so.2.4.3
7f190d120000-7f190d139000 r--p 00032000 08:08 1180923                    /lib/x86_64-linux-gnu/libseccomp.so.2.4.3
7f190d139000-7f190d13a000 rw-p 0004b000 08:08 1180923                    /lib/x86_64-linux-gnu/libseccomp.so.2.4.3
7f190d13a000-7f190d141000 r-xp 00000000 08:08 1185059                    /lib/x86_64-linux-gnu/librt-2.27.so
7f190d141000-7f190d340000 ---p 00007000 08:08 1185059                    /lib/x86_64-linux-gnu/librt-2.27.so
7f190d340000-7f190d341000 r--p 00006000 08:08 1185059                    /lib/x86_64-linux-gnu/librt-2.27.so
7f190d341000-7f190d342000 rw-p 00007000 08:08 1185059                    /lib/x86_64-linux-gnu/librt-2.27.so
7f190d342000-7f190d4fa000 r-xp 00000000 08:08 1180295                    /lib/systemd/libsystemd-shared-237.so
7f190d4fa000-7f190d6f9000 ---p 001b8000 08:08 1180295                    /lib/systemd/libsystemd-shared-237.so
7f190d6f9000-7f190d783000 r--p 001b7000 08:08 1180295                    /lib/systemd/libsystemd-shared-237.so
7f190d783000-7f190d784000 rw-p 00241000 08:08 1180295                    /lib/systemd/libsystemd-shared-237.so
7f190d784000-7f190d786000 rw-p 00000000 00:00 0 
7f190d786000-7f190d96d000 r-xp 00000000 08:08 1179742                    /lib/x86_64-linux-gnu/libc-2.27.so
7f190d96d000-7f190db6d000 ---p 001e7000 08:08 1179742                    /lib/x86_64-linux-gnu/libc-2.27.so
7f190db6d000-7f190db71000 r--p 001e7000 08:08 1179742                    /lib/x86_64-linux-gnu/libc-2.27.so
7f190db71000-7f190db73000 rw-p 001eb000 08:08 1179742                    /lib/x86_64-linux-gnu/libc-2.27.so
7f190db73000-7f190db77000 rw-p 00000000 00:00 0 
7f190db77000-7f190dba0000 r-xp 00000000 08:08 1179738                    /lib/x86_64-linux-gnu/ld-2.27.so
7f190dd78000-7f190dd88000 rw-p 00000000 00:00 0 
7f190dda0000-7f190dda1000 r--p 00029000 08:08 1179738                    /lib/x86_64-linux-gnu/ld-2.27.so
7f190dda1000-7f190dda2000 rw-p 0002a000 08:08 1179738                    /lib/x86_64-linux-gnu/ld-2.27.so
7f190dda2000-7f190dda3000 rw-p 00000000 00:00 0 
7ffc80c4a000-7ffc80c6b000 rw-p 00000000 00:00 0                          [stack]
7ffc80c87000-7ffc80c8a000 r--p 00000000 00:00 0                          [vvar]
7ffc80c8a000-7ffc80c8b000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0                  [vsyscall]
czl@czl-RedmiBook-14:~/Workspace/memory$ 

选择进程1806:

czl@czl-RedmiBook-14:~/Workspace/linux-compile/linux-5.4.128$ sudo cat /proc/1806/maps
[sudo] password for czl: 
557b0444b000-557b04453000 r-xp 00000000 08:08 789204                     /usr/lib/gnome-shell/gnome-shell-calendar-server
557b04652000-557b04653000 r--p 00007000 08:08 789204                     /usr/lib/gnome-shell/gnome-shell-calendar-server
557b04653000-557b04654000 rw-p 00008000 08:08 789204                     /usr/lib/gnome-shell/gnome-shell-calendar-server
557b063b8000-557b064ab000 rw-p 00000000 00:00 0                          [heap]
7f2044000000-7f2044021000 rw-p 00000000 00:00 0 
7f2044021000-7f2048000000 ---p 00000000 00:00 0 
7f204c000000-7f204c082000 rw-p 00000000 00:00 0 
7f204c082000-7f2050000000 ---p 00000000 00:00 0 
7f2050000000-7f2050021000 rw-p 00000000 00:00 0 
7f2050021000-7f2054000000 ---p 00000000 00:00 0 
7f2055f26000-7f2055f27000 ---p 00000000 00:00 0 
7f2055f27000-7f2056727000 rw-p 00000000 00:00 0 
7f2056727000-7f2056732000 r-xp 00000000 08:08 1185027                    /lib/x86_64-linux-gnu/libnss_files-2.27.so
7f2056732000-7f2056931000 ---p 0000b000 08:08 1185027                    /lib/x86_64-linux-gnu/libnss_files-2.27.so
7f2056931000-7f2056932000 r--p 0000a000 08:08 1185027                    /lib/x86_64-linux-gnu/libnss_files-2.27.so
7f2056932000-7f2056933000 rw-p 0000b000 08:08 1185027                    /lib/x86_64-linux-gnu/libnss_files-2.27.so
7f2056933000-7f2056939000 rw-p 00000000 00:00 0 
7f2056939000-7f2056950000 r-xp 00000000 08:08 1184968                    /lib/x86_64-linux-gnu/libnsl-2.27.so
7f2056950000-7f2056b4f000 ---p 00017000 08:08 1184968                    /lib/x86_64-linux-gnu/libnsl-2.27.so
7f2056b4f000-7f2056b50000 r--p 00016000 08:08 1184968                    /lib/x86_64-linux-gnu/libnsl-2.27.so
7f2056b50000-7f2056b51000 rw-p 00017000 08:08 1184968                    /lib/x86_64-linux-gnu/libnsl-2.27.so
7f2056b51000-7f2056b53000 rw-p 00000000 00:00 0 
7f2056b53000-7f2056b5e000 r-xp 00000000 08:08 1185029                    /lib/x86_64-linux-gnu/libnss_nis-2.27.so
7f2056b5e000-7f2056d5d000 ---p 0000b000 08:08 1185029                    /lib/x86_64-linux-gnu/libnss_nis-2.27.so
7f2056d5d000-7f2056d5e000 r--p 0000a000 08:08 1185029                    /lib/x86_64-linux-gnu/libnss_nis-2.27.so
7f2056d5e000-7f2056d5f000 rw-p 0000b000 08:08 1185029                    /lib/x86_64-linux-gnu/libnss_nis-2.27.so
7f2056d5f000-7f2056d67000 r-xp 00000000 08:08 1185018                    /lib/x86_64-linux-gnu/libnss_compat-2.27.so
7f2056d67000-7f2056f67000 ---p 00008000 08:08 1185018                    /lib/x86_64-linux-gnu/libnss_compat-2.27.so
7f2056f67000-7f2056f68000 r--p 00008000 08:08 1185018                    /lib/x86_64-linux-gnu/libnss_compat-2.27.so
7f2056f68000-7f2056f69000 rw-p 00009000 08:08 1185018                    /lib/x86_64-linux-gnu/libnss_compat-2.27.so
7f2056f69000-7f2056f7a000 r-xp 00000000 08:08 806472                     /usr/lib/evolution-data-server/camel-providers/libcamelpop3.so
7f2056f7a000-7f2057179000 ---p 00011000 08:08 806472                     /usr/lib/evolution-data-server/camel-providers/libcamelpop3.so
7f2057179000-7f205717a000 r--p 00010000 08:08 806472                     /usr/lib/evolution-data-server/camel-providers/libcamelpop3.so
7f205717a000-7f205717b000 rw-p 00011000 08:08 806472                     /usr/lib/evolution-data-server/camel-providers/libcamelpop3.so
7f205717b000-7f2057191000 r-xp 00000000 08:08 806470                     /usr/lib/evolution-data-server/camel-providers/libcamelnntp.so
7f2057191000-7f2057391000 ---p 00016000 08:08 806470                     /usr/lib/evolution-data-server/camel-providers/libcamelnntp.so
7f2057391000-7f2057392000 r--p 00016000 08:08 806470                     /usr/lib/evolution-data-server/camel-providers/libcamelnntp.so
7f2057392000-7f2057393000 rw-p 00017000 08:08 806470                     /usr/lib/evolution-data-server/camel-providers/libcamelnntp.so
7f2057393000-7f2057399000 r-xp 00000000 08:08 806474                     /usr/lib/evolution-data-server/camel-providers/libcamelsendmail.so
7f2057399000-7f2057598000 ---p 00006000 08:08 806474                     /usr/lib/evolution-data-server/camel-providers/libcamelsendmail.so
7f2057598000-7f2057599000 r--p 00005000 08:08 806474                     /usr/lib/evolution-data-server/camel-providers/libcamelsendmail.so
7f2057599000-7f205759a000 rw-p 00006000 08:08 806474                     /usr/lib/evolution-data-server/camel-providers/libcamelsendmail.so
7f205759a000-7f20575fc000 r-xp 00000000 08:08 806466                     /usr/lib/evolution-data-server/camel-providers/libcamelimapx.so
7f20575fc000-7f20577fb000 ---p 00062000 08:08 806466                     /usr/lib/evolution-data-server/camel-providers/libcamelimapx.so
7f20577fb000-7f20577fe000 r--p 00061000 08:08 806466                     /usr/lib/evolution-data-server/camel-providers/libcamelimapx.so
7f20577fe000-7f20577ff000 rw-p 00064000 08:08 806466                     /usr/lib/evolution-data-server/camel-providers/libcamelimapx.so
7f20577ff000-7f2057800000 ---p 00000000 00:00 0 
7f2057800000-7f2058000000 rw-p 00000000 00:00 0 
7f2058000000-7f2058021000 rw-p 00000000 00:00 0 
7f2058021000-7f205c000000 ---p 00000000 00:00 0 
7f205c000000-7f205c031000 rw-p 00000000 00:00 0 
7f205c031000-7f2060000000 ---p 00000000 00:00 0 
7f2060000000-7f2060021000 rw-p 00000000 00:00 0 
7f2060021000-7f2064000000 ---p 00000000 00:00 0 
7f2064035000-7f206403f000 r-xp 00000000 08:08 806476                     /usr/lib/evolution-data-server/camel-providers/libcamelsmtp.so
7f206403f000-7f206423e000 ---p 0000a000 08:08 806476                     /usr/lib/evolution-data-server/camel-providers/libcamelsmtp.so
7f206423e000-7f206423f000 r--p 00009000 08:08 806476                     /usr/lib/evolution-data-server/camel-providers/libcamelsmtp.so
7f206423f000-7f2064240000 rw-p 0000a000 08:08 806476                     /usr/lib/evolution-data-server/camel-providers/libcamelsmtp.so
7f2064240000-7f2064267000 r-xp 00000000 08:08 806468                     /usr/lib/evolution-data-server/camel-providers/libcamellocal.so
7f2064267000-7f2064466000 ---p 00027000 08:08 806468                     /usr/lib/evolution-data-server/camel-providers/libcamellocal.so
7f2064466000-7f2064468000 r--p 00026000 08:08 806468                     /usr/lib/evolution-data-server/camel-providers/libcamellocal.so
7f2064468000-7f2064469000 rw-p 00028000 08:08 806468                     /usr/lib/evolution-data-server/camel-providers/libcamellocal.so
7f2064469000-7f206446a000 ---p 00000000 00:00 0 
7f206446a000-7f2064c6a000 rw-p 00000000 00:00 0 
7f2064c6a000-7f2064c76000 r-xp 00000000 08:08 1051083                    /usr/lib/x86_64-linux-gnu/gio/modules/libdconfsettings.so
7f2064c76000-7f2064e75000 ---p 0000c000 08:08 1051083                    /usr/lib/x86_64-linux-gnu/gio/modules/libdconfsettings.so
7f2064e75000-7f2064e76000 r--p 0000b000 08:08 1051083                    /usr/lib/x86_64-linux-gnu/gio/modules/libdconfsettings.so
7f2064e76000-7f2064e77000 rw-p 0000c000 08:08 1051083                    /usr/lib/x86_64-linux-gnu/gio/modules/libdconfsettings.so
7f2064e77000-7f2064e78000 ---p 00000000 00:00 0 
7f2064e78000-7f2065678000 rw-p 00000000 00:00 0 
7f2065678000-7f2065679000 ---p 00000000 00:00 0 
7f2065679000-7f2065e79000 rw-p 00000000 00:00 0 
7f2065e79000-7f2065e7a000 ---p 00000000 00:00 0 
7f2065e7a000-7f206667a000 rw-p 00000000 00:00 0 
7f206667a000-7f2066683000 r-xp 00000000 08:08 1179744                    /lib/x86_64-linux-gnu/libcrypt-2.27.so
7f2066683000-7f2066882000 ---p 00009000 08:08 1179744                    /lib/x86_64-linux-gnu/libcrypt-2.27.so
7f2066882000-7f2066883000 r--p 00008000 08:08 1179744                    /lib/x86_64-linux-gnu/libcrypt-2.27.so
7f2066883000-7f2066884000 rw-p 00009000 08:08 1179744                    /lib/x86_64-linux-gnu/libcrypt-2.27.so
7f2066884000-7f20668b2000 rw-p 00000000 00:00 0 
7f20668b2000-7f20668f8000 r-xp 00000000 08:08 795028                     /usr/lib/x86_64-linux-gnu/libhx509.so.5.0.0
7f20668f8000-7f2066af7000 ---p 00046000 08:08 795028                     /usr/lib/x86_64-linux-gnu/libhx509.so.5.0.0
7f2066af7000-7f2066afa000 r--p 00045000 08:08 795028                     /usr/lib/x86_64-linux-gnu/libhx509.so.5.0.0
7f2066afa000-7f2066afb000 rw-p 00048000 08:08 795028                     /usr/lib/x86_64-linux-gnu/libhx509.so.5.0.0
7f2066afb000-7f2066afc000 rw-p 00000000 00:00 0 
7f2066afc000-7f2066b0a000 r-xp 00000000 08:08 795012                     /usr/lib/x86_64-linux-gnu/libheimbase.so.1.0.0
7f2066b0a000-7f2066d09000 ---p 0000e000 08:08 795012                     /usr/lib/x86_64-linux-gnu/libheimbase.so.1.0.0
7f2066d09000-7f2066d0a000 r--p 0000d000 08:08 795012                     /usr/lib/x86_64-linux-gnu/libheimbase.so.1.0.0
7f2066d0a000-7f2066d0b000 rw-p 0000e000 08:08 795012                     /usr/lib/x86_64-linux-gnu/libheimbase.so.1.0.0
7f2066d0b000-7f2066d33000 r-xp 00000000 08:08 795588                     /usr/lib/x86_64-linux-gnu/libwind.so.0.0.0
7f2066d33000-7f2066f32000 ---p 00028000 08:08 795588                     /usr/lib/x86_64-linux-gnu/libwind.so.0.0.0
7f2066f32000-7f2066f33000 r--p 00027000 08:08 795588                     /usr/lib/x86_64-l
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

papaofdoudou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值