linux /boot目录下的文件分析
一. Linux 启动流程
首先说一下Linux系统大概的启动过程:
1. 主机加电后, 系统首先加载BIOS, 这个BIOS是以写在主板上的.
2. BIOS启动后,执行一些例如开机自检,硬件初始化等工作,然后读取硬盘的第一个扇区,这个扇区被称为MBR.这个扇区中存储了
一个小程序,叫做boot loader.MBR很小,只有446B. 最常见的一种boot loader叫 grub.
3. boot loader程序主要做两件事,一个是将内核加载到内存中,另一个是启动一个虚拟文件系统.内核文件是/boot/vmlinuz*,虚拟文件
系统文件是/boot/initrd*.
4.这个两个文件加载到内存中后,系统会加载真正的文件系统,然后启动1号进程init.这样一个系统就启动了
下面主要分析一下/boot/vmlinuz和/boot/initrd文件的内容
二. vmlinuz分析
a. mkdir /tmp/vmlinuz&&cp /boot/vmlinuz-4.4.0-21-generic /tmp/vmlinuz/
b. cd /tmp/vmlinuz/
c. od -t x1 -A d vmlinuz-4.4.0-21-generic | grep "1f 8b 08"
本质上,vmlinuz-4.4.0-21-generic 是一个gzip压缩文件,但是不能直接用gzip指令解压,因为在这个文件的开头嵌入了gzip的代码.
所以首先用指令c找到真正的压缩文件的头部.这个指令的输出形如:
0018864 ac fe ff ff 1f 8b 08 00 00 00 00 00 02 03 ec fd
然后执行下面的指令,其中的18868就是 18864+4,这里4是指1f 8b 08前面有4个字节.
dd if=vmlinuz-4.4.0-21-generic bs=1 skip=18868 | zcat > vmlinuz-gakki
objdump -D vmlinuz-gakki >> result
我们可以看到,最终得到的result就是一个汇编文件.而vmlinuz-gakki文件本质上是一个可执行程序.可以尝试
执行他, chmod +x vmlinuz-gakki &&./vmlinuz-gakki .
显示Segmentation fault
二. intrid分析
首先将/boot/intird.img文件复制到/tmp文件夹下
执行file /tmp/initrd.img-4.4.0-21-generic,得到的结果如下:
/tmp/initrd.img-4.4.0-21-generic: gzip compressed data, last modified: Fri Jun 15 13:57:43 2018, from Unix
可以看到本质上这是一个gzip格式的压缩文件
cd /tmp
mv initrd.img-4.4.0-21-generic initrd.img-4.4.0-21-generic.gz
gzip -d initrd.img-4.4.0-21-generic.gz
file initrd.img-4.4.0-21-generic
得到的结果为:
initrd.img-4.4.0-21-generic: ASCII cpio archive (SVR4 with no CRC)
这是一个cpio文件
执行 cpio -idmv < initrd.img-4.4.0-21-generic
这样,我们可以看到它最终生成了一个小型的文件系统.
linux /boot目录下的文件分析的更多相关文章
- linux替换目录下所有文件中的某字符串
linux替换目录下所有文件中的某字符串 比如,要将目录/modules下面所有文件中的zhangsan都修改成lisi,这样做: sed -i "s/zhangsan/lisi/g&quo ...
- [转帖]linux /proc目录下的文件为何无法用vi编辑保存
linux /proc目录下的文件为何无法用vi编辑保存 https://blog.51cto.com/xlogin/1216914 学习一下 之前看过书 这一点 没太仔细看.. xlogin关注8人 ...
- linux查看目录下所有文件内容中是否包含某个字符串
转发自:http://blog.csdn.net/yimingsilence/article/details/76071949 查找目录下的所有文件中是否含有某个字符串 find .|xargs gr ...
- linux 查找目录下的文件内容并替换(批量)
2.sed和grep配合 命令:sed -i s/yyyy/xxxx/g `grep yyyy -rl --include="*.txt" ./` 作用:将当前目录(包括子目录)中 ...
- linux 查询目录下包含关键字的所有文件
linux查找目录下的所有文件中是否含有某个字符串 查找目录下的所有文件中是否含有某个字符串 find .|xargs grep -ri "IBM" 查找目录下的所有文件中是否含有 ...
- linux 中 如何 搜索 指定目录 下 指定文件 的 指定内容
开发时,经常遇到 全局查找某些代码 linux 中 如何 检索 某 目录下指定文件 的 指定内容如下: //.点为查找当前目录 下 的 所有 *.php 文件里 有 hello 的文件 find . ...
- Linux和Windows的遍历目录下所有文件的方法对比
首先两者读取所有文件的方法都是采用迭代的方式,首先用函数A的返回值判断目录下是否有文件,然后返回值合法则在循环中用函数B直到函数B的返回值不合法为止.最后用函数C释放资源. 1.打开目录 #inclu ...
- Linux查找和替换目录下所有文件中字符串(转载)
转自:http://rubyer.me/blog/1613/ 单个文件中查找替换很简单,就不说了.文件夹下所有文件中字符串的查找替换就要记忆了,最近部署几十台linux服务器,记录下总结. 查找文件夹 ...
- linux find-在指定目录下查找文件
推荐:更多Linux 文件查找和比较 命令关注:linux命令大全 find命令用来在指定目录下查找文件.任何位于参数之前的字符串都将被视为欲查找的目录名.如果使用该命令时,不设置任何参数,则find ...
随机推荐
- oracle的隐式游标
游标的概念: 游标是SQL的一个内存工作区,由系统或用户以变量的形式定义.游标的作用就是用于临时存储从数据库中提取的数据块.在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理, ...
- ASP.NET Identity 使用 RoleManager 进行角色管理 (VS2013RC)
注:本文系作者原创,但可随意转载. 最近做一个Web平台系统,系统包含3个角色,“管理员, 企业用户, 评审专家”, 分别有不同的功能.一直以来都是使用微软封装好的Microsoft.AspNet.I ...
- testng自定义注解
在testng中大部分的注解已经可以满足我们测试的需求,但是在测试的时候想要通过注解的方式加入自己测试一些内容,比如 测试项目 测试描述 验证点等信息,可通过自定义注解的方式实现. 具体操作步骤如下 ...
- 让DIV的滚动条自动滚动到最底部 - 3种方法
要制作一个在线聊天的程序,在做最后的修饰时,需要对获得的信息即时滚动以保证用户总能看到最新消息. 聊天程序是基于AJAX设计的,没有用框架,消息容器是一个DIV,所以问题就在于如何控制DIV的滚动条. ...
- (转)cygwin个性化配置
http://blog.cong.co/cygwin.html#%E5%AE%9A%E4%B9%89%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F配置 cygwin 中的服务 ...
- C++笔试题目大全(笔试宝典)(不断完善中)
1.new . delete . malloc . free 关系 delete 会调用对象的析构函数 , 和 new 对应 free 只会释放内存, new 调用构造函数. malloc 与 fre ...
- css伪类元素:after 的多功能用法——任意大小的底边框
需求用法出现的背景: 由于项目UI的优化,项目中所有tab导航选中的状态都是统一样式书写的,之前都是用的border-bottom,新的需求如果用以前的本办法就是定位一个选中边框在底部,但是涉及的模板 ...
- 利用ICSharpCode进行压缩和解压缩
说说我利用ICSharpCode进行压缩和解压缩的一些自己的一下实践过程 1:组件下载地址 参考文章:C#使用ICSharpCode.SharpZipLib.dll压缩文件夹和文件 2: 文件类 // ...
- 利用js将图片地址进行转义
利用js将图片地址进行转义 在业务中经常需要将图片从后台获取,然后在前台显示.其中后台存取图片主要分为两种,一种是数据库中获取图片的地址,第二种是存取图片内容的信息.这次主要是前台代码处理第一种情况. ...
- hiho一下第128周 后缀自动机二·重复旋律5
#1445 : 后缀自动机二·重复旋律5 时间限制:10000ms 单点时限:2000ms 内存限制:512MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为一段数构成的数 ...