気になったことのあれこれ。この広告は、90日以上更新していないブログに表示しています。Unix概要xv6のコードリーティングを通してUnixの動作を追う。今回は起動イメージを見ていく。Unixのマルチプロセッサx86システムへの再実装である。xv6はMITにおけるオペレーティングシステムエンジニアリング(6.828)コースにて、教育を目的として使われている。LinuxやBSDとは異なり、xv6は1セメスターで学習するのに十分なほどシンプルであり、Unixの重要な概念と構造を含んでいる。https://ja.wikipedia.org/wiki/Xv6上記にもあるようにxv6自体は非常に小さなOSでありながら、Unixの重要な概念と構造を含んでおり、学習用に作られたというだけあって非常に理解が容易である。このxv6を通じてUnixの最低限の動作をトレースできたらと思う。イメージ作成イメージの作成にはリポジトリのディレクトリ直下でmakeコマンドを用いて行う。MB/s生成されたイメージは以下。xv6.imgImageの構造makeコマンドの出力から以下のような流れでイメージが作成されていることがわかる。MB/s最初のセクタはブートセクタ(bootblock)となっており、その次のセクタ(kernel)からカーネルイメージが開始するのがわかる。1の位置)に512byte書込まれていて、各パーティションの先頭セクタに存在するPBRを読出すための小さなプログラムと各パーティションのディスク情報が含まれています。引用:http://caspar.hazymoon.jp/OpenBSD/arch/i386/stand/mbr/mbr_structure.htmlイメージに書き込まれていたbootblockのサイズは512バイトと単一セクタのサイズとなっており、以下のfileコマンドの出力からもマスターブートレコードを保持したブートセクタだとわかる。sectorboolblockのダンプ結果は以下。000055aaパーティションテーブルは存在せず最後の2バイトにMBRのシグニチャを保持していることがわかる。MBR領域はPCの電源がONされたときにBIOSによってメモリー上の0000:7C00番地に読込まれます。引用:http://caspar.hazymoon.jp/OpenBSD/arch/i386/stand/mbr/mbr_structure.html上記のようにMBRがBIOSによって読み込まれ規定のアドレスに展開される。objdumpコマンドでブートセクタをダンプする。:上記の出力からbootasm.Sのコードと同じだということがわかる。:最後に呼び出しているbootmainはC言語で記述された関数でbootmain.cで定義されている。bootmain()関数ではカーネルイメージをメモリアドレスの0x10000に展開し、最終的にその展開したカーネルイメージのentryに処理を移す。entry();}entry()関数はentry.Sのentry:に対応している。カーネルイメージカーネルイメージをダンプすると以下のように出力される。*%eax:これは前述のentry.Sに対応していることがわかる。https://microcorruptio...2018-11-11ネズミ本のpwn編をやってみた。»Profile低レイヤ好きのソフトウェアエンジニア。(1)はてなブログをはじめよう!k--onishiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。