一. 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目录下的文件分析的更多相关文章

  1. linux替换目录下所有文件中的某字符串

    linux替换目录下所有文件中的某字符串 比如,要将目录/modules下面所有文件中的zhangsan都修改成lisi,这样做: sed -i "s/zhangsan/lisi/g&quo ...

  2. [转帖]linux /proc目录下的文件为何无法用vi编辑保存

    linux /proc目录下的文件为何无法用vi编辑保存 https://blog.51cto.com/xlogin/1216914 学习一下 之前看过书 这一点 没太仔细看.. xlogin关注8人 ...

  3. linux查看目录下所有文件内容中是否包含某个字符串

    转发自:http://blog.csdn.net/yimingsilence/article/details/76071949 查找目录下的所有文件中是否含有某个字符串 find .|xargs gr ...

  4. linux 查找目录下的文件内容并替换(批量)

    2.sed和grep配合 命令:sed -i s/yyyy/xxxx/g `grep yyyy -rl --include="*.txt" ./` 作用:将当前目录(包括子目录)中 ...

  5. linux 查询目录下包含关键字的所有文件

    linux查找目录下的所有文件中是否含有某个字符串 查找目录下的所有文件中是否含有某个字符串 find .|xargs grep -ri "IBM" 查找目录下的所有文件中是否含有 ...

  6. linux 中 如何 搜索 指定目录 下 指定文件 的 指定内容

    开发时,经常遇到 全局查找某些代码 linux 中 如何 检索 某 目录下指定文件 的 指定内容如下: //.点为查找当前目录 下 的 所有 *.php 文件里 有 hello 的文件 find . ...

  7. Linux和Windows的遍历目录下所有文件的方法对比

    首先两者读取所有文件的方法都是采用迭代的方式,首先用函数A的返回值判断目录下是否有文件,然后返回值合法则在循环中用函数B直到函数B的返回值不合法为止.最后用函数C释放资源. 1.打开目录 #inclu ...

  8. Linux查找和替换目录下所有文件中字符串(转载)

    转自:http://rubyer.me/blog/1613/ 单个文件中查找替换很简单,就不说了.文件夹下所有文件中字符串的查找替换就要记忆了,最近部署几十台linux服务器,记录下总结. 查找文件夹 ...

  9. linux find-在指定目录下查找文件

    推荐:更多Linux 文件查找和比较 命令关注:linux命令大全 find命令用来在指定目录下查找文件.任何位于参数之前的字符串都将被视为欲查找的目录名.如果使用该命令时,不设置任何参数,则find ...

随机推荐

  1. idiots

    idiots 题目描述 给定 $n$ 个长度分别为 $a_i$ 的木棒,问随机选择 $3$ 个木棒能够拼成三角形的概率. 输入格式 第一行一个正整数 nn. 第二行 nn 个正整数,第 ii 个数表示 ...

  2. DP———2.最大m子序列和

    Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  3. KMP字符串匹配算法翔解❤

    看了Angel_Kitty学姐的博客,我豁然开朗,写下此文: 那么首先我们知道,kmp算法是一种字符串匹配算法,那么我们来看一个例子. 比方说,现在我有两段像这样子的字符串: 分别是T和P,很明显,P ...

  4. 自定义View基础 (1)

    前言 自定义View原理是Android开发者必须了解的基础: 在了解自定义View之前,你需要有一定的知识储备: 本文将全面解析关于自定义View中的所有知识基础. 目录 目录 1. View的分类 ...

  5. Html5学习进阶二 画布

    canvas 元素用于在网页上绘制图形. 什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canv ...

  6. C 语言中char* 和const char*的区别

    const char *p = "123"; p[1] = '3'; // 会报错p = "456"; // 不会报错 const char * 只是说指针指向 ...

  7. VS2013 MFC C++ CString ,const char , char, string 类型转换

    VS2013 测试 以下测试加入头文件: # include <string>#include <cstdlib>using namespace std; //-------- ...

  8. Linux 根据组来划分账号,根据部门同一账号的组,同一组下拥有同一权限

    #新机器添加 #创建部门组与账号 useradd testgroup #创建员工账号加入到部门组里 useradd -g testgroup user1 #员工在/data目录下创建的默认权限为774 ...

  9. python每日一类(4):slice

    class slice(stop)class slice(start, stop[, step]) Return a slice object representing the set of indi ...

  10. 一篇好文档,请Thymeleaf Layout Dialect

    Thymeleaf Layout Dialect https://ultraq.github.io/thymeleaf-layout-dialect/ This will introduce the  ...