记得学习编程时的第一个helloworld程序:
#include<stdio.h>
Int main(int argc, char **argv)
{
printf(“Hello World”);
return 0;
}
打印” Hello World”,使用的是printf函数。但是,我们并没有去实现printf函数的功能,而是由C语言标准库去实现,我们直接加载该库就可以了。像这样的例子,还有很多。
在开发软件时,我们通常只实现软件的核心逻辑功能,而把基础的功能交给第三方完成,这样的好处是代码体积更小、占用更小的存储空间,而且更方便管理。如果我们想要知道软件加载了哪些库,就需要进行内存模块遍历。
Android内存模块遍历的原理
在Android系统上,要进行内存模块遍历,必须要了解proc文件系统。在linux系统上,把一切信息通过文件的形式输出。proc也是文件系统的一种,但是,它是伪文件系统,不占用磁盘空间,而是由内核挂载到内存中。proc文件系统提供了内核配置、进程状态输出等功能。
关于进程内存模块的信息,存放到proc文件系统下以pid为目录名称下的maps文件中,可以通过”cat /proc/21358/maps”命令打印(21358为假设的进程号)出,如下图:
maps文件中每份模块信息的组织方式为:
第1列: