写作业,记录一下心得。致敬阳神。
以下内容都是我的个人理解,可能有各种偏差。。。orz
虚拟机在进行挂起时,为了在下一次打开时能够直接使用,它保存了当前状态的内存信息!
我猜是虚拟机突然剥夺了什么资源吧,然后整个系统就在等资源了,然后趁机拷贝内存。。。
内存拷贝好后是一个*.vmem文件,大小应该是等于你分配的内存大小。
把它复制到一个风水宝地,比如你外界的的c++工程目录。
然后就开始分析吧:
首先要看进程信息,就要知道进程的管理是靠PCB控制块,那么,内存里的PCB控制块放在哪里呢?
讲道理我是不知道的,但是,所有的总得有个头吧。也就是传说中的0号进程——init_task
0号进程是linux初始化的第一个进程,直接由系统生成,他被定义在Syetem.map里,这个文件在linux的boot里
无法直接查看的,只有用命令行,要root才能cat
这样你生成一个xxxx.txt的文件,其实就是把这个玩意复制了一份,现在你可以查看xxxx.txt了
通过简单的搜索,可以找到init_task的位置。
我的在56410行
我还是不太习惯linux,所以大部分操作都在windows(其实现在已经对linux有些好感了)
好了,我们找到了它对应的地址,就是c1863200,这个是个虚拟地址,映射到物理地址就是直接减去0