2018の18日目の記事として書かれました。昨日はsatos氏の駒場祭CTF作問の裏話でした。皆さん、どうも、TSGの中で一番新入部員っぽい雰囲気を醸し出してる1年のJP3BGYです。Reading分科会に関連したお話をしようと思います。KernelなどのLinux関連のソフトウェアのソースコードを多読してC言語やLinuxシステムに強くなろうという分科会(TSG内部で毎週開かれる定期勉強会の類です)です。Kernelのmmap()を読みすすめています。なんだかんだそれなりに上手く行っていて、それなりに好評っぽいので次の春学期にもやろうかなと企んでいます(味をしめた人)。来年東大に入るであろう人やこれからプログラミングを始めようとしている東大生は是非TSGに入って僕と一緒にC言語を多読しましょう。閑話休題、そろそろ本題に入りましょう。Kernelの挙動を見ています。BIOSはクソだから読みたくない等の理由でUEFI環境を用意しておきたいと思うかもしれません。Linuxを実行できる環境を用意しましょう。firmwareです。これを使うことでUEFIアプリケーションをQEMU上で実行、デバッグすることができるというすぐれものです。-initrdオプションを用いてKernelを直に起動することができます。Grub2やらのUEFI対応ブートローダーの設定をしなくてもKernelが起動できるのはソースを読む側にとって非常に好都合です(無駄なソフトがない分デバッグが楽)。これを使わない手はないので是非使い方を覚えましょう。ビルドOVMFを使うためにはまずOVMFをビルドする必要があります。Ubuntu等一部の環境ではパッケージマネージャの中にビルド済みOVMFを配布しているものも存在しますが無いものも多いのでここではビルドを用いた方法を書きます。iasl(acpica-tools)をパッケージマネージャからインストールします。以下のコマンドを実行するだけ。X64これでx64用のOVMFがedk2/Build/なんたらかんたら/OVMF.fdという場所に出来上がります。これを好きな場所にコピーして使いましょう。Kernelをビルドしましょう。parameterについて書きます。kakinotane氏の記事の設定ではそもそもKernelがUEFIに対応していないとかVGAドライバがなくてGUIが立ち上がらないとかの問題があるのでそのへんをどうにかするべくいろいろいじったのですが、ブラックリストで消していくとうまく行くのに、ホワイトリストで設定をonにしていくととたんに動かなくなる(隠れたパラメタが原因っぽい?)のでここに僕が使ったできる限り項目を減らした.configへのリンクを貼っときます。これをダウンロードして.configをうまいこと差し替えてください。当然ですが自分の見たいKernelの機能もyesにするようにしてください。Moduleを読み込むことができないということです。読みたい機能は必ずMではなくyにするようにしてください。Moduleをどうしても読み込みたいという方はこちらのgistページの下の方に書かれているBuildrootを用いた方法を使ってみてください。後は実行してやるだけ。これでちゃんと起動してやることもできるし、-sオプションをつかってgdbデバッグもできる。終わりに実はここまで使えるようになるまでにいろいろありまして、OVMFのソースデバッグをゴリゴリやりーのQEMUのソースを読みーのをしていました。そのあたりの話についてはアドベントカレンダー24日の記事に書きますので楽しみにしていてください。