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

时间:2015-06-05 09:26:09

标签: linux memory-management memory-address

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

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

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

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

  • [0xC000 0000](3 GB)到[0xFFFF FFFF](4 GB)的KERNEL SPACE的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;
}

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

0 个答案:

没有答案