未来のいつか/hyoshiokの日記

hyoshiokの日々思うことをあれやこれや

ダンプを読む

ダンプを読む。この何日かの日記はひたすらダンプを読んでいたのだが、ふと振り替えると後ろに誰もいない感じがする。おおおお〜い。生きているかぁ〜。
復習。知らないコマンドがでてきたらmanで調べる。とりあえづ調べる。知らない単語は辞書を引け。高校の英語の教師の村松は授業中に5秒に一度は辞書を引けと言っていたが彼の言っていた事は正しかった。辞書を引け。知らない単語に出会ったら辞書を引け。高校時代教わった事で唯一役に立っている真実は辞書をともかく引くと言う事である。辞書と友達になる。知らない単語だけではなく知っているつもりの単語も辞書を引け。言うのは簡単であるが実践する事は簡単ではない。人生の真実と言うものは言うはやすく行うはがたしである。
それはともかく、ダンプを読む。man odとかする。そもそもodってなんなんだよ。odの親戚みたいな物でcdというのもよくでて来る。lsというのもあるよな。Linuxつーか、Unixのコマンドというのはなんでまた英文字二文字からなるんだ。catっていったいなんなんだ。もちろんUnixのコマンドに関する罵詈雑言を百万遍繰り返した所で問題はいっこうに良い方向に進みはしない。そーゆーもんである。ここは大人の対応としてman odする。

第28ブロックをダンプする。
# od -txz -Ad /dev/fd0
0028672 00000002 0201000c 0000002e 00000002  >................<
↑(1)       (2)     (3)     (4)
0028688 0202000c 00002e2e 0000000b 020a0014  >................<
0028704 74736f6c 756f662b 0000646e 0000000c  >lost+found......<
0028720 020803d4 736f7968 6b6f6968 00000000  >....hyoshiok....<
0028736 00000000 00000000 00000000 00000000  >................<

ここで(1)の部分は先頭からのバイト数である。28672というのは1024*28ということで1024が一ブロックあたりのバイト数で28ブロック目なので28672ということである。(2)〜(4)は32ビットごとにくぎって16進数で表示してあるので読み解くのにちょっとコツがいる。インテルアーキテクチャはリトルエンディアンなのでアドレスが小さい方が右側にくる。(意味不明な説明である。)例えば01020304とあった時1バイトづつ区切って01 02 03 04としてそのアドレスを見ると一番下位のバイトが04で一番上位のバイトが01となる。言っている事わかりますか?

アドレス  3  2  1  0
値       WW XX YY ZZ

上の例でいくとWWのアドレスはZZのアドレスプラス3ということである。つまりアドレスの小さい順で行くとZZ、YY、XX、WWとなる。

0028672 00000002 0201000c 0000002e 00000002  >................<
         3 2 1 0←アドレス

28672番地というのは一番左の塊の32ビットのうちに一番右のところ(アドレス0)である。次のアドレスは1のところである。だから28672番地は02で28673番地から28675番地は0である。次の0201000Cという16進数をどう解釈するのか?28676番地は0Cということはわかった。昨日の日記によれば最初の32ビットはinode番号で次の16ビットがレコード長、次の8ビットが名前の長さ、ファイルの型、そしてファイル名となっているので、00000002がinode番号、0201000Cのうち右4桁(16ビット)すなわち000Cがレコード長12バイト、名前の長さが01でファイルの型が02(ディレクトリ)ということになる。次の32ビットにファイル名がASCII文字で示されているのだが0000002eというのは「.(ピリオド)」である。つまりディレクトリ「.」のinode番号2だということになる。
簡単な事を不必要に複雑化しているような気もしなくはない。あるアドレスのバイト列を印刷しているだけなのだけどね。それのお作法を理解すればダンプは読めるようになる。