下面顺着分析之三的思路,追溯到19号磁盘块,首先算出其偏移地址19*1024=19456即4C00处,这里的磁盘映象如下:
00004c00h: 01 00 2E 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00004c10h: 01 00 2E 2E 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00004c20h: 02 00 62 69 6E 00 00 00 00 00 00 00 00 00 00 00 ; ..bin...........
00004c30h: 06 00 64 65 76 00 00 00 00 00 00 00 00 00 00 00 ; ..dev...........
00004c40h: 19 00 65 74 63 00 00 00 00 00 00 00 00 00 00 00 ; ..etc...........
00004c50h: 1E 00 75 73 72 00 00 00 00 00 00 00 00 00 00 00 ; ..usr...........
00004c60h: 3C 00 74 6D 70 00 00 00 00 00 00 00 00 00 00 00 ; <.tmp...........
00004c70h: 44 00 72 6F 6F 74 00 00 00 00 00 00 00 00 00 00 ; D.root..........
00004c80h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; 该块后面都为0
这里每一行,即16个字节,表示一个目录项。
struct dir_entry{
unsigned short inode;
char name[NAME_LEN];
};
第一个目录项,4c00那一行中,inode为01,表示该目录所在i节点为第1个i节点,name为"."就是所谓的当前目录了"/",这个目录i节点确实
就是第一个,即我们在分析之三中分析的那个。
第二个目录项,inode为01,name为".."表示上一层目录,目前已是根目录了,上层目录也是根目录,这就是为什么在根目录时执行cd ..命令
时结果还是根目录。
第三个目录项,inode为02,name为"bin",它就表示/bin目录了。
后面的几个同理可知其涵义。如此,这个文件系统根目录下面有.,..,bin,dev,etc,usr,tmp,root这8个目录了,每个目录占用16个字
节,总共就占用了128个字节了,这个数字和分析之三中的i_size为128刚好吻合。
下面我们顺藤摸瓜,看看这个root目录下面有些什么东西。root位于第44H=68个i节点,在磁盘映象中找到如下:
00001860h: ED 41 00 00 20 00 00 00 00 58 9C 29 00 02 4D 05 ; 鞟.. ....X?..M.
00001870h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
这个root目录的i节点显示其数据块在054DH=1357块中,即1357*1024=153400H处
00153400h: 44 00 2E 00 00 00 00 00 00 00 00 00 00 00 00 00 ; D...............
00153410h: 01 00 2E 2E 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
除了两个.,..目录外这个目录下面什么也没有,可以看到.目录就是当前目录,其i节点为44,..指向根目录,而根目录i节点为01,和前面的
分析刚好吻合。
再看看usr目录下面有什么东西,usr位于第1EH=30个i节点,再磁盘映象中找到如下:
000013a0h: ED 41 00 00 50 00 00 00 80 79 73 29 00 05 95 01 ; 鞟..P...?ys)..?
000013b0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
这个目录的i节点显示其数据块在0195H=405块中,即405*1024=414720=65400H处
00065400h: 1E 00 2E 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00065410h: 01 00 2E 2E 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00065420h: 1F 00 62 69 6E 00 00 00 00 00 00 00 00 00 00 00 ; ..bin...........
00065430h: 3B 00 6C 6F 63 61 6C 00 00 00 00 00 00 00 00 00 ; ;.local.........
00065440h: 3D 00 72 6F 6F 74 00 00 00 00 00 00 00 00 00 00 ; =.root..........
显然比root目录多了bin,local,root目录了,下面往该文件系统中写一个文件,看看通过这里的分析方法是否能够找到。