elf形式の解析をrustでやってみてる
5年くらい前からxv6のコードを読みたいなーと、何度かチャレンジして失敗している。新人教育してくれた先輩がカーネル屋さんだったり組み込みの方が多かったので、なんとなく低レイヤーに憧れがあるのだと思う。
チャレンジ失敗している理由としては、普段業務でやってないブートローダー・メモリ配置・アセンブラあたりで躓くことが多いので、今回はまずリンカ・ローダの本を読み進めている。
限られた環境のみだが、elf形式の解析(readelfの再実装)がなんとなく動く状態になってきた。今回は勉強兼ねてrustに挑戦してみている。
つまづいたところ
C言語の感覚でstructを定義してbinaryをキャストしてもうまく行かなかった。明示的にアトリビュートを指定しないと、structのメモリーレイアウトが勝手に組み替えられるっぽい
関数を共通化するためにconst genericsという機能を使いたかったが、nightlyにしか入ってなさそうだった。
手を動かしたので、ELFの構造と中に何が入っているのかはなんとなく理解できるようになった。 あと、rustのセットアップ、以前はvscodeの設定を色々弄る必要があった覚えがあったが、すんなり終わったので敷居だいぶ下がったなぁと思った。
今週末4連休なので、簡易ローダづくりを終わらせたい
参考にしたページ
https://msyksphinz.hatenablog.com/entry/2020/08/08/040000
https://tomo-wait-for-it-yuki.hatenablog.com/entry/2019/01/05/161331
https://uclibc.org/docs/elf-64-gen.pdf