繁体   English   中英

进程的虚拟内存中的开始和结束地址

[英]Start and end address in virtual memory of a process

我有一个已编写的C程序,正在尝试对其进行内存映射。

如何将进程环境的开始地址和结束地址(在虚拟内存中)打印到屏幕上。

该程序将始终在Linux上运行,不确定是否会有所不同,但是它不需要任何可移植性。

我正在寻找的东西最好只是给我一个开始和结束的十六进制地址。

看一下C编程中的这个例子。

user@linux:~$ cat hello.c 
#include<stdio.h>

int main()
{
 printf("Hello World\n");
 getchar();
}
user@linux:~$ gcc hello.c -o hello
user@linux:~$ ./hello 
Hello World

打开另一个控制台以查找进程ID(pid)。 运行ps命令,如下所示; 用您的程序名称更改hello

在这种情况下,进程ID(pid)为2011

user@linux:~$ ps -ef | grep hello | grep -v grep
user      2011  1864  0 17:21 pts/2    00:00:00 ./hello
user@linux:~$ 

然后,使用cat命令检查/proc/[pid]/maps文件

user@linux:~$ cat /proc/2011/maps | grep stack
bffeb000-c0000000 rw-p 00000000 00:00 0          [stack]
user@linux:~$ 

或者,您也可以使用pmap命令

user@linux:~$ pmap 2011 | grep stack
bffeb000     84K rw---    [ stack ]
user@linux:~$ 

在这两种情况下,我们都可以看到堆栈从地址bffeb000开始

根据您的要求,如果您知道特定进程的PID,我认为您可以获取该进程的内存映射。 使用命令“ pmap ”获取更多信息http://linux.die.net/man/1/pmap

&如果您想在程序中打印它,请尝试使用getpid()函数获取pid; 然后使用system()调用执行pmap命令。

您可以简单地打印出/proc/[PID]/maps文件的内容,其中[PID]是您的进程的进程标识符的值(调用getpid()找出该值是什么)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM