如何获得可靠的x86_64位linux系统的内存映射

我有一个非常简单的程序,添加2个variables写在C中。 我正在Linux机器上执行它。 我想查看程序执行过程中引用的所有内存引用/虚拟地址。 从程序中我得到虚拟地址(通过某种方式),但我不知道哪个地址属于用户空间,哪个属于内核空间。

我曾经使用过一些帮手(都没有达到目的):

  • 获取Linux中每个设备的内存映射: sudo cat /proc/iomem
  • 更多: sudo cat /proc/vmallocinfo
  • 进程的内存映射: pmap -x pids
  • 进程的内存区域: cat /proc/pid/maps

对于32位,我知道Linux只使用4段:

  • KERNEL SPACE从[0xC000 0000] (3 GB)到[0xFFFF FFFF] (4 GB)的2段(代码和数据/堆栈)
  • 用户空间从[0x0000 0000] (0 GB)到[0xBFFF FFFF] (3 GB)的2个段(代码和数据/堆栈)

但是我想知道64位的相似范围。

我的代码

 #include <stdio.h> #include <stdlib.h> int main(){ int a = 1, b = 2, c; void *ptr; c = a + b; ptr = malloc(8); printf("Result %d %p \n", c, ptr); return 0; } 

奖励:如果有可能知道用户代码,库空间和系统/内核空间的虚拟地址。