Linux的VirtualQueryEx替代方案-如何获得另一个进程的虚拟内存范围
VirtualQueryEx alternative for Linux - how to get virtual memory range of another process
我浏览了这个博客和这个视频广播。在Windows中,如果我想检索指定进程的虚拟地址空间内的一系列页面的信息,我可以使用WinAPIVirtualQueryEx
方法:
MEMORY_BASIC_INFORMATION meminfo;
unsigned char *addr = 0;
for(;;)
{
if(!VirtualQueryEx(hProc, addr, &meminfo, sizeof(meminfo)))
break;
if(meminfo.State & MEM_COMMIT)
{
//collect some data from meminfo
}
addr = (unsigned char*)meminfo.BaseAddress + meminfo.RegionSize;
}
我想知道如何使用系统调用在Linux中获得类似的信息集,但我不清楚如何使用C/C++在Linux下收集这样的数据。当有人建议查看/proc/<pid>/mem
或/proc/<pid>/maps
文件时,我浏览了这个线程。方向好吗?除了Linux之外,最接近这里提供的实现应该是什么?
是的,proc
文件系统是Linux API的一部分,所以这就是我们要做的。该文件系统中的许多数据通常是使用库包装器访问的,但这就是数据所在的位置。
据我所知,/proc/<pid>/maps
是唯一可靠且受支持的方法。甚至libunwind
也在使用它:
if (maps_init (&mi, getpid()) < 0)
return -1;
unsigned long offset;
while (maps_next (&mi, &low, &hi, &offset)) {
struct dl_phdr_info info;
info.dlpi_name = mi.path;
info.dlpi_addr = low;
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 运行同一解决方案的另一个项目的项目
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- C++从另一个类访问公共静态向量的正确方法是什么
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 为什么一个变量获得与另一个值相同的值
- 通过Insertkey和BuildHeap的另一个建造一个堆,从一个堆堆中获得不同的答案
- 尝试启动另一个进程并通过 MPI 加入它,但获得访问冲突
- 试图弄清楚如何使用递归来获得与另一个函数相同的答案
- 如何从Windows上的Windows API上的另一个应用程序获得应用程序宽度和高度
- Linux的VirtualQueryEx替代方案-如何获得另一个进程的虚拟内存范围
- 如何使用.txt文件从我的数独游戏C的另一个文件中获得输入
- Qt GUI 如何从另一个类获得进度
- 平台独立性:它与将源代码从一个操作系统移动到另一个操作系统有何不同
- 交叉投射以获得另一个被认为是糟糕设计的接口
- MFC如何从另一个类获得CString到CRegSettings类
- 在C中,我如何在执行另一个函数时不断获得用户输入
- 如何从另一个地图键列表中减去一个列表并获得新的地图(地图A - mab =地图C)
- 建议需要插入一个字符串到另一个一旦获得文本从剪贴板