Linux文件系统分析之五(常规文件的表示)

时间:2022-08-15 20:10:06

 通过rootimage引导,往/usr/root目录下面写入hello.c文件,在分析之四中已经到达了/usr/root目录,在进一步看看这个目录里面有什么内容:
    这个目录位于第3DH=61个i节点,再磁盘映象中找到如下:
00001780h: FF 41 00 00 50 00 00 00 48 A2 47 40 00 02 29 05 ; ?A..P...H@..).
00001790h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
所以/usr/root目录的实际数据存放在0529H=1321块中,1321*1024=1352704=14A400H偏移地址处
0014a400h: 3D 00 2E 00 00 00 00 00 00 00 00 00 00 00 00 00 ; =...............
0014a410h: 1E 00 2E 2E 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
0014a420h: 3E 00 2E 62 61 73 68 5F 68 69 73 74 6F 72 79 00 ; >..bash_history.
0014a430h: 42 00 61 2E 6F 75 74 00 00 00 00 00 00 00 00 00 ; B.a.out.........
0014a440h: 45 00 68 65 6C 6C 6F 2E 63 00 00 00 00 00 00 00 ; E.hello.c.......
0014a450h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
还是老一套,同样有.,..目录,除此之外还有.bash_history,a.out,hello.c文件,就是我们写进去的文件了。该文件的i节点号为45H=69,找到此i节点:
00001880h: 80 81 00 00 4A 00 00 00 48 A2 47 40 00 01 9A 05 ; ??.J...H@..?
00001890h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
这个i节点就是hello.c文件的i节点,这个文件的数据放在059AH=1434块中,1434*1024=1468416=166800H偏移地址处
00166800h: 23 69 6E 63 6C 75 64 65 20 3C 73 74 64 69 6F 2E ; #include <stdio.
00166810h: 68 3E 0A 0A 69 6E 74 20 6D 61 69 6E 28 29 0A 7B ; h>..int main().{
00166820h: 0A 09 70 72 69 6E 74 66 28 22 48 65 6C 6C 6F 2C ; ..printf("Hello,
00166830h: 20 77 6F 72 6C 64 21 5C 6E 22 29 3B 0A 09 72 65 ;  world!\n");..re
00166840h: 74 75 72 6E 20 30 3B 0A 7D 0A 00 00 00 00 00 00 ; turn 0;.}.......
00166850h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00166860h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00166870h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
这个hello.c就这样显身了。
在详细地看看这个i节点的内容,
i_mode是8180即1000.0001.1000.0000
第一个四位1000表示这是一个常规文件,接下来的三位000表示文件的属性,执行或搜索时是否设置uid
最后面的九位1.1000.0000表示rwxrwxrwx了,这是个文件主人可以读写,但是不能执行的文件,其它组或人都不能读写执行该文件。

i_uid为0000,表示这个文件的所有者是root

i_size为0000004A,表示这个文件的长度为74个字节,数一数,确实是74个字节。

i_nlinks为01,表示有1个文件目录项指向该i节点,可以创建链接ln再来看看这个是否为1。