脳のリセマラで妥協した文系プログラマがバイナリを読み始めるまでとその後というかタイトルが長い

ブログとか生涯で書いたことがないためこれが人生初のブログ投稿となるわけで、形式的には軽く自己紹介とか挟むべきなのでしょうが、実際は自分も含め誰もそんなことに興味ないわけで、さっさと本題の方に入っていきます。

 

...で、この投稿は文字通り脳のリセマラで妥協した文系プログラマがどのようにしていわゆる「低レイヤ」といわれる分野の勉強を始め、現在も執り行っているかですが、では簡単にポイントをまとめます。

 

....あ、やっぱりまとめません。雑多に書いていきます。

−10日目(つまり始める前)〜180日目(現在)までの様子を時系列で適当に書き散らします。何日目の部分は相当適当です。そんなの正確になんて記憶してるわけないです。昨日の夕食すら怪しい。あと、ですます調もここまでです。

 

−10日目:

rui ueyamaさん(https://twitter.com/rui314)という、グーグルで働かれている方のポッドキャスト(正確にはrebuild.fmという最強の技術系ポッドキャストに、氏がゲスト出演をされていた回)を聴く。

rebuild.fm

 

Cコンパイラをスクラッチからインクリメンタルに開発した話とかリンカの話とか、当時は(割と今でも)内容的には理解不能だったが、妙に「すげーかっけー」とか言って、割と持続性のある興味関心を低レイヤに不可解にも突然抱きはじめる。

あと、そもそもこのrebuild.fmというポッドキャストは神なので、全霊長類が聴くべきたぶん。(技術系の話題が主だが、それ以外にも本当にいろいろなことについて楽しく語られている)

 

−5日目:

るくすさんというかた(https://twitter.com/RKX1209)のブログになぜだか辿り着く。

rkx1209.hatenablog.com

 このブログでとりあえずなんか「30日OS本」というのを読まないと人権が無いみたいな雰囲気を醸し出していたので買って読み始める。

 

books.google.co.jp

 

0日目:

やっと30日OS本を読み始める。

1日目:

ん?あれ?予備知識とかまったくないし、正直ポインタの理解すら怪しかったのに、たちどころにすべてそのへんもわかるように書かれているぞこの本初日にして神か?

2日目:

本を見ればとりあえずコードを自分で書かなくても流れを追えるようには書かれているけど、なんとなく写経して、少しくらい改造もしたいんだが?

3日目:

写経をし始め、手元でOSが少しずつ出来ていく。あ、嘘。まだなにも出来てない。けど、ブートして黒い画面にHello Worldとか表示されて、とりあえず厨ニ的何かが始まる。

4日目:

もう書くの飽きた。あとはこれでも見てくれ。とりあえず連続80日くらい草生やした。楽しかった。一秒も飽きなかった。

github.com

個人的にはvramに値を書き込んでいって文字列とか何らかの図形とかマウスとかを描画したり、画面にZ-Order付きのウィンドウをたくさん出して、それらを効率よくrefreshするために、各ウィンドウに番号を割り振ってそれらをvramにマッピングしたり、とかが楽しかったというか失敗した時のインパクトが破滅的だった(画面がありえない崩れ方するので)

 

80日目:

...で、30日OS本を80日掛けてとりあえず読んでみたのだが、その途中で出てくるアセンブリとかいう謎のアレがまったく理解出来ない。→当然理解したい。

 

85日目:

自然な流れで大熱血アセンブラ入門という書籍というか鈍器を購入。いざという時、護身にも役に立ちそうなほど重いので、一家に一台大熱血を推していきたい。あと表紙が中本のカップ麺のパッケージに似てると思う。

www.shuwasystem.co.jp

f:id:vane11ope:20171219131930j:plainうん、似てるわやっぱり。

 

...で、この本、「多種多様なCPUのアセンブラを前提知識無しで読み進めてみようアセンブリ怖くない楽しい最高」みたいな本なのだが、看板に偽りなしと言った感じで、アセンブリ入門するには神本とも言える内容であったので、ぜひ。なんかあっという間に700ページ位まで読んでた面白すぎて。

個人的には「バイナリエディタが出てくると聞くと、とってもワクワクしてきませんか?それは普通の正常な反応なので、安心してください」という一文が最高 of the year

 

120日目:

で、上の大熱血本を読んだらアセンブリだけではなく、なんかハードウェアとかについてもいろいろ言及されており、次は自然とそっちにも興味が向くのが人間の性ということで、こちらを購入。

books.google.co.jp

そんなに深く語れるほど内容をまだ理解できていないというか、まだ250ページ位までしか読めていないのであれですが。

内容はパイプライン処理についてだったり、プロセッサの評価方法についてだったり、MIPSで算術演算アルゴリズムについて見てみたりと...

アセンブリもたくさん読むことになるのだが、「大熱血アセンブラ入門」では多種多様なCPUを広く浅くだったのに比して、こちらではMIPSのアセンブリにほぼ限定して、より深く学んでいく感じになっている。

 

170日目 ~ 現在:

上のパタへネを読みつつ、あと片手間になぜか数学というか算数とかもやりながら、今度は学んだアセンブリの知識を実戦に活かしたいということで、CTFに参加することを決定。revやる。radare2というOSSツールを用いてバイナリを読む。

github.com

 

 終焉。

 

おまけ:

上の見ればわかるように、まだ大して何もやってないわけだが、とりあえずここまで低レイヤをうっかり引退というか早期退職しないようにやったこと。

 

Twitterをやる。以上。

メリットしか無いので。この界隈、強い人とか神(ゼウス)とかでもなんかガンガンフォロバ返ってくるし、しかもなんか惰性で「MIPSの浮動小数点演算わかんねえwww」とか「パイプライン処理とはwww」とか「にゃーんwww」とか適当に草でも生やして投げとけばたちどころにプロ各位が解答を返してくれます。

安全面でいうと、孤独にひとりでバイナリを読み続けていると、段々と病み始めて、気づいた時には天に召されている、なんてことも起こりえるので、仲間大事Twitter大事!

あと、Twitterでわざと大きなことを宣言して進捗を毎日つぶやくTDD(Twitter Driven Development)は、業界でも最高峰の開発手法の一つとして広く知られているところでもあります。嘘ですけど。