12ステップOS自作本の開発環境をGentoo Linux + crossdev + gcc 7.3.0で構築した話
10月の初旬に「12ステップで作る組込みOS自作入門」という本を買いました。
H8というCPUが乗ったマイコンボード上に組込みOSを動かすという内容で、サボりつつも2ヶ月程度で完成させることができました。
かいつまんでやったことを紹介すると、ELFファイルをXMODEMで受信し、RAM上に展開して実行するブートローダの作成を前半6回で行い、システムコールやスレッド管理、スケジューラを持つOSの作成を後半6回で行います。
アセンブリやリンカスクリプトの書き方を始めとし、割り込みやメモリ管理といったOSの基本的な機能まで丁寧に説明しているので、専門外の私でも理解することができました。
実機やシリアルコンソールの購入が必要なため、本と合わせると一万円弱の出費が必要ですが、OS自作というレアな実績が解除できるので非常におすすめです。
ただし、初版の出版が2010年と少し古く、推奨環境がUbuntu9.10やWindows XPといったサポート切れのOSになっています。
筆者のHPで構築済みのVMが配布されているため、これを用いれば問題ないのですが、クロスコンパイラのビルドという一つの大きなタスクが未消化に終わってしまいます。
一方、Gentoo Linuxといえば(運が良ければ)GCCのビルドがコマンド一発でできるディストリビューションとして、一部のクラスタから熱狂的な支持を集めています(多分)。
更にcrossdevというツールを用いるとコマンド一発でクロスビルド環境が整うという、まるで本書のためにあつらえたかのようなディストリビューションです。
そこで今回はGentoo Linux + crossdevでh8300-elf-gcc 7.3.0な環境を構築するまでのメモです。
続きを読むひろしま学生IT勉強会第3回(3/9開催)
ひろしま学生IT勉強会で発表した資料です。
PIE(position-independent executable)なオブジェクトの中身を見てみる
巷ではSpectre/Meltdownが話題になっている.
有効な対策として(K)ASLRが挙げられており,これはプロセス実行時のメモリ空間の配置をランダマイズすることで,例えば攻撃者が配置したコードのアドレスへのJMP等を防ぐことができる.
詳しくはシェルコードでググろう(解説できるほど詳しくない).
共有ライブラリは原則的にPIC(position-independent code)としてビルドされており,これらはASLRの恩恵に与ることができる.
しかし,通常のアプリケーションは絶対アドレスを用いて記述されているため,ASLRによるランダマイズが適用できない.
そこで,セキュリティ向上のために相対アドレスを用いたPIE(position-independent executable)と呼ばれる形式が通常のアプリケーションにおいても使用されている.
昔はセキュリティ上重要なファイルだけがPIEでビルドされていたらしいが,最近ではGentoo Linuxのprofile 17.0からPIEでのビルドがデフォルトオプションになったりしている.(これ全パッケージのリビルドが必要なので,まだ更新できてないです.同時にpython3.4がstableに降ってきたりして酷いことになりました…)
https://www.gentoo.org/support/news-items/2017-11-30-new-17-profiles.html
しかし,PIEでビルドした場合はパフォーマンスの低下が懸念されている.論文ではベンチマークであるSPEC CPU2006を用いて評価実験を行い,幾何平均で9.4%のパフォーマンス低下という結果を得たと述べている.
だが,実際にPIEを用いることで何がボトルネックになっているのか分からないので,今回はPIEなオブジェクトの中身を見てみる.
中身が見たくて見てるので,パフォーマンス低下の考察なら論文でしてると思うよ.