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