全实验仅用到一个Linux命令——hexdump,有关该命令,详见文章:
第一关
1.在超级块中,i 节点位图所占的块数是多少?区块位图所占的块数是多少?数据区的第一个区块的编号是多少?索引节点区的第一个数据块的编号和起始地址是多少?
由图可知,超级块位于第2个块(1号块),每块大小为1024B,因此超级块起始地址为0x400
显示0x400开始的内容(超级块):
hexdump -s 0x400 -n 1024 -C rootimage-0.11
由上表对照可获得下表数据:
字段名称 | 十六进制 | 十进制 |
i节点数 | 0x0d60 | 3,424 |
区块数 | 0x2800 | 10,240 |
i节点位图所占块数 | 0x1 | 1 |
逻辑块位图所占块数 | 0x2 | 2 |
数据区中第一个逻辑块块号 | 0x70 | 112 |
后面内容做了省略。
索引节点(i节点,inode)区的第一个数据块的编号:
1(引导块) + 1(超级块) + 1(i节点位图1块) + 2(逻辑块位图2块) = 5
索引节点(i节点,inode)区的第一个数据块的起始地址:
0x400 * 5 = 0x1400
1 号索引节点的第一个区块的编号和起始地址分别是多少?
由上表可知i_zone[0]在索引节点的位置:
2(i_mode) + 2(i_uid) + 4(i_size) + 4(i_mtime) + 1(i_gid) + 1(i_nlinks) = 14
显示0x1400开始的内容(1号索引节点):
hexdump -s 0x1400 -n 32 rootimage-0.11
得到1号索引节点的第一个区块号:0x70
地址:0x400 * 0x70 = 0x1c000
2.目录 /usr 的索引节点的编号和起始地址分别是多少?![](https://img-blog.csdnimg.cn/direct/f1847426685f4e4e88a62c1ea2a1cbcf.png)
由上图可知,i节点号位于文件名的前2Byte,可据此快速定位。
显示0x1c000开始的内容(根目录):
hexdump -s 0x1c000 -n 1024 -C rootimage-0.11
从ASCII码的解码可以找到/usr目录的位置,从而获得/usr的索引节点号为0x30
由于每一个索引节点长度为32,因此可根据如下公式计算/usr索引节点的地址:
0x1400 + 32 * (0x30 - 1) = 0x19e0
3.目录 /usr 的索引节点的第一个区块的编号和起始地址分别是多少?
显示0x19e0开始的内容(/usr索引节点):
hexdump -s 0x19e0 -n 32 rootimage-0.11
/usr的第一个区块的编号0x3db
地址:0x400 * 0x03db = 0xf6c00
4.目录 /usr/root 的索引节点的编号和起始地址分别是多少?
显示从0xf6c00开始的内容(/usr目录):
hexdump -s 0xf6c00 -n 1024 -C rootimage-0.11
从ASCII码的解码可以找到/usr/root目录的位置,从而获得/usr/root的索引节点号为0x83
地址:0x1400 + 32 * (0x83 - 1) = 0x2440
显示从0x2440开始的内容(/usr/root索引节点):
hexdump -s 0x2440 -n 32 rootimage-0.11
/usr/root的第一个区块的编号0x1271
地址:0x400 * 0x1271 = 0x49c400
5.文件 /usr/root/hello.c 的索引节点的第一个区块的编号和起始地址分别是多少?
显示从0x49c400开始的内容(/usr/root目录):
hexdump -s 0x49c400 -n 1024 -C rootimage-0.11
从ASCII码的解码可以找到/usr/root/hello.c目录的位置,从而获得/usr/root/hello.c的索引节点号为0x86
地址:0x1400 + 32 * (0x86 - 1) = 0x24a0
显示从0x24a0开始的内容(/usr/root/hello.c索引节点):
hexdump -s 0x24a0 -n 32 rootimage-0.11
/usr/root/hello.c的第一个区块的编号0x1287
地址:0x400 * 0x1287 = 0x4a1c00
6.文件 /usr/root/hello.c 的头两个字节是什么?
显示从04a1c00开始的内容(/usr/root/hello.c文件):
头两个字节分别为0x23 0x69
用图片可以很好地总结:
答案:
1.在超级块中,i 节点位图所占的块数是多少?(1)区块位图所占的块数是多少?(2)数据区的第一个区块的编号是多少?(0x70)索引节点区的第一个数据块的编号和起始地址是多少?(5)(0x1400)
2.1 号索引节点的第一个区块的编号和起始地址分别是多少?(0x70)(0x1c000)
3.目录 /usr 的索引节点的编号和起始地址分别是多少?(0x30)(0x19e0)
4.目录 /usr 的索引节点的第一个区块的编号和起始地址分别是多少?(0x03db)(0xf6c00)
5.目录 /usr/root 的索引节点的编号和起始地址分别是多少?(0x83)(0x2440)
6.目录 /usr/root 的索引节点的第一个区块的编号和起始地址分别是多少?(0x1271)(0x49c400)
7.文件 /usr/root/hello.c 的索引节点的编号和起始地址分别是多少?(0x86)(0x24a0)
8.文件 /usr/root/hello.c 的索引节点的第一个区块的编号和起始地址分别是多少?(0x1287)(0x4a1c00)
9.文件 /usr/root/hello.c 的头两个字节是什么?(0x23)(0x69)
第二关
1.目录 /etc 的索引节点的编号和起始地址分别是多少?
由第1关可知,根目录(/)起始地址从0x1c000开始
显示0x1c000开始的内容(根目录):
hexdump -s 0x1c000 -n 1024 -C rootimage-0.11
从ASCII码的解码可以看出,/etc的索引节点号为0x23
地址:0x1400 + 32 * (0x23 - 1) = 0x1840
2.目录 /etc 的索引节点的第一个区块的编号和起始地址分别是多少?
显示0x1840开始的内容(/etc索引节点):
hexdump -s 0x1840 -n 32 rootimage-0.11
/etc的第一个区块的编号0x03b7
地址:0x400 * 0x03b7= 0xedc00
3.文件 /etc/magic 的索引节点的编号和起始地址分别是多少?
显示0xedc00开始的内容(/etc目录):
hexdump -s 0xedc00 -n 1024 -C rootimage-0.11
从ASCII码的解码可以找到/etc/magic目录的位置,从而获得/etc/magic的索引节点号为0x2a
地址:0x1400 + 32 * (0x2a - 1) = 0x1920
由上图可知,zone[7]是一次间接块号,zone[8]是二次(双重)间接块号。
显示0x1920开始的内容(/etc/magic索引节点):
hexdump -s 0x1920 -n 32 rootimage-0.11
可得:
/etc/magic的第一个区块的编号0x3c9
/etc/magic 的一次间接块号0x03d0
/etc/magic的二次间接块号 N/A
地址:
0x400 * 0x3c9 = 0xf2400 第一个区块
0x400 * 0x03d0 = 0xf4000 一次间接块
4.文件 /etc/magic 的索引节点的最后一个区块的编号和起始地址分别是多少?
显示0xf4000开始的内容(/etc/magic文件的一次间接块):
hexdump -s 0xf4000 -n 32 -C rootimage-0.11
/etc的最后一个区块的编号0x03d5
地址:0x400 * 0x03d5 = 0xf5400
5.文件 /etc/magic 的尾部包含字符串XENIX 8086 relocatable or 80286 small model,其起始地址是什么?
显示0xf5400开始的内容(/etc/magic文件最后一个区块):
hexdump -s 0xf5400 -n 1024 -C rootimage-0.11
从ASCII码的解码可以看出,XENIX 8086 relocatable or 80286 small model的首字母“X”的地址:0xf55e0 + 13 = 0xf55ec
用图片可以很好地总结:
答案:
1.目录 /etc 的索引节点的编号和起始地址分别是多少?(0x23)(0x1840)
2.目录 /etc 的索引节点的第一个区块的编号和起始地址分别是多少?(0x03b7)(0xedc00)
3.文件 /etc/magic 的索引节点的编号和起始地址分别是多少?(0x2a)(0x1920)
4.文件 /etc/magic 的索引节点的最后一个区块的编号和起始地址分别是多少?(0x3d5)(0xf5400)
5.文件 /etc/magic 的尾部包含字符串 XENIX 8086 relocatable or 80286 small model ,其起始地址是什么?(0x000f55ec)
总结:
这里引用CSDN作者@歌者`的一张图,可以直观表示: