Linux系统用户态根据虚拟地址获取物理地址的方式
之前做项目的时候,也会遇到过根据页表,由虚拟地址翻译物理地址的需求,一般的做法是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)1Y)) 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-linu

相关新闻

从零基础到行业标杆:为什么安康中小企业选择安康鼎盛网站建设能少走五年弯路?

从零基础到行业标杆:为什么安康中小企业选择安康鼎盛网站建设能少走五年弯路?

在这个数字化浪潮席卷每一个角落的今天,咱们做实业的老板们,尤其是身在咱们安康这片山水秀美之地的创业者们,心里可能都有过这样的焦虑:手机微信能联系客户,但怎么显得更有“排面”?朋友圈能发广告,但怎么让客户觉得咱们是正规军而非散兵游勇?很多老友跟我聊天时都会叹…

2026/10/12 6:04:33 阅读更多 →
苏州初创企业票据管理一站式指南,新手创业老板必读

苏州初创企业票据管理一站式指南,新手创业老板必读

别等月底翻抽屉找票——票据管不好,账就是一笔糊涂账 很多初创老板对“票据”的理解就一句话:发票嘛,客户要我就开,采购给了我就收,月底一股脑扔给会计就行了。 但现实往往是——月底会计催票,你翻遍手机相…

2026/10/11 21:35:17 阅读更多 →
从本地化自研到效果可落地:2026华中区域GEO服务商TOP5实力拆解

从本地化自研到效果可落地:2026华中区域GEO服务商TOP5实力拆解

引言随着生成式 AI 搜索全面渗透华中地区企业客户决策链路,GEO(生成式引擎优化,Generative Engine Optimization)已成为武汉及周边城市企业抢占 AI 流量、构建区域品牌心智的核心战略工具。2026 年国内 AI 搜索月活突破 8.2 亿&am…

2026/10/4 10:07:11 阅读更多 →

最新新闻

项目进度管理10.1-10.3思维导图:定规矩、拆动作、排顺序

项目进度管理10.1-10.3思维导图:定规矩、拆动作、排顺序

做项目管理系统学习的人,十有八九都会在“项目进度管理”这一章卡过壳。第10章的10.1到10.3,也就是规划进度管理、定义活动、排列活动顺序这三小节,是整个进度管理知识域的起手式。看似只有三节,但信息密度极高,术语之…

2026/10/12 6:05:34 阅读更多 →
X4独角兽新版PHP视频网站源码实测:部署、播放器与二次开发指南

X4独角兽新版PHP视频网站源码实测:部署、播放器与二次开发指南

做视频站的朋友应该都清楚,选一套靠谱的源码比什么都重要。市面上PHP视频网站源码不少,但真正能打、更新及时、后台顺手的不多。今天聊的这套X4独角兽视频网站新版源码,我前后在本地和服务器上都跑过,也拿它搭过测试站&#xff0c…

2026/10/12 6:05:34 阅读更多 →
AI 调试心法:用「完整日志 + 循环修复」让 AI 成为你的排错搭档

AI 调试心法:用「完整日志 + 循环修复」让 AI 成为你的排错搭档

文档教程Vibe Coding示例工程 【免费下载链接】vibe-vibe The First Systematic Vibe Coding Open-Source Tutorial | From Zero to Full-Stack, Empowering Everyone to Build Products with AI | Live at: www.vibevibe.cn ;首个系统化 Vibe Coding 开源教程 | 零…

2026/10/12 6:05:34 阅读更多 →
用巴菲特原则评估量子创业:从护城河到价值创造

用巴菲特原则评估量子创业:从护城河到价值创造

量子、巴菲特、创业生态、价值创造,这四个词放到一句话里,很多人第一反应是"硬凑"。一边是奥马哈的吼叫与汽水,一边是实验室里的极低温稀释制冷机,画风差得有点远。但过去两年我一直在用巴菲特的财务标尺去反推一批量子…

2026/10/12 6:05:34 阅读更多 →
Vibe Coding真相:零基础也能用自然语言打造效率工具?

Vibe Coding真相:零基础也能用自然语言打造效率工具?

1. 先说个真实场景:一个零基础朋友是怎么把活干完的前两天一个从没写过代码的朋友找我,说单位里每天要整理几十张Excel表,手工复制粘贴到晚上八点。她说听说现在有Vibe Coding,问我是不是真的不用学编程也能自己做个工具。当时我的…

2026/10/12 6:05:34 阅读更多 →
牛客寒假算法集训营第一场题解:双指针、树形DP与字符串DP实战

牛客寒假算法集训营第一场题解:双指针、树形DP与字符串DP实战

牛客寒假算法基础集训营第一场这套题,我印象挺深。难度曲线并不是那种“签到题送到嘴边、压轴题劝退所有人”的极端分布,前几道确实送分,但从G题开始就进入双指针、树形DP、字符串DP这些正经考点,最后两道又考模型转化和临场取舍。…

2026/10/12 6:04:34 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →