如何用C/C++语言查找Linux/UNIX中进程的所有读写内存地址?

2024-02-11

通过 /proc 文件系统,可以使用 /proc/PID_PROCESS/maps 读取内存映射,但是在 C/C++ 中是否有专门用于此功能的本机 API?

即找出 PID 9322 的进程可写和可读的内存地址:

%> awk -F "-| " '$3 ~ /rw/ { print $1 " " $2}' /proc/9322/maps
0804e000 0804f000
085ed000 0860e000
b7707000 b7708000
b7864000 b7865000
b7865000 b7868000
b7897000 b7898000
b78b6000 b78b7000
bfd2e000 bfd50000

这些地址被传递到我的程序中,但现在我想将此函数直接集成到我的 C++ 程序中。

为了获得最大的效率,如果我想支持其他*BSD系统,我将无法利用/proc系统,并且我认为应该有一些方法来直接生成例如/proc/1/maps,而无需再次读取它们。 ,如有错误请指正^_^


好吧,你可以使用以下方法获取进程的 PID:

pid_t pid = getpid();

然后,您可以打开文件 /proc/PID/maps 并将其解析为数组,以确定哪些内存组是可读写的。

编辑: getpid() 函数需要#include <unistd.h>.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何用C/C++语言查找Linux/UNIX中进程的所有读写内存地址? 的相关文章

随机推荐