我有一个非常简单的程序,用于添加用c编写的2个变量。我在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;
}
奖励:如果可以知道用户代码,库空间和系统/内核空间的虚拟地址......