进程的虚拟地址空间(见图2.17)和体系结构有关。64位Linux系统的进程的虚拟地址空间大小为2 64 B。
图2.17 64位Linux的进程的虚拟地址空间
在Linux下,用户可以使用proc文件系统查看进程的虚拟地址空间。proc文件系统是一个伪文件系统,提供了访问内核数据结构的一个接口。
(1)/proc/[pid]/mem:进程的内存镜像,可以通过open()、read()和lseek()函数对该文件进行打开、读和查找操作。
(2)/proc/[pid]/maps包含进程的当前内存镜像以及各个区的访问权限。
下面举例说明proc文件系统的使用,被测的应用源码如Listing 2.22所示。
Listing 2.22 进程虚拟地址空间测试的应用源码loop.c
(1)访问进程空间的脚本文件:其功能是在进程的堆中搜索要查找的字符串,若找到,则用另一字符串进行替换,代码如Listing 2.23所示。
Listing 2.23 读取进程虚拟地址空间的脚本,read-write-heap.py
(2)脚本文件的运行,命令如下:
上述命令的作用是在进程4618的虚拟内存空间中查找字符串“Holberton”,找到后使用“Fun w vm!”进行替换。