池袋バイナリ勉強会入門編に参加してきた

機械語入門・集中講座(2014/06) - connpass

先週末、池袋バイナリ勉強会の機械語入門・集中講座という勉強会に参加してきた。
参加しようと思ったきっかけはだいたいこんな感じ。

元々そろそろx86_64アセンブラを勉強したいなと思っていたのでそれらしい勉強会がないか探していたところ、
原書で学ぶ64bitアセンブラ入門 - connpass
という勉強会を見つけた。
後から話を聞くと、現在x86_64アセンブラをまともに解説している書籍は洋書しかないらしい。

まあそれもそのはず、64bitアセンブラなんて初心者がやるものではなく、16bitアセンブラ、32bitアセンブラを勉強した上級者がその段階の続きとして学ぶ位置づけであり、そのような人はIntel仕様書を頼りに勉強することができるはずなのである。
そのため、このような初学者向けの64bitアセンブラ解説本は非常に珍しいという。

話がそれたが、僕はこの勉強会を見つけた後、主催者の7shiさんが他にもいろいろと勉強会を開催しているのを見つけ、その中に今回の勉強会があったというわけである。

大きな流れとしては、16進数やバイナリの基礎知識から8086アセンブラを導入し、最終的にIntelのデータシートが読めるようになるということである。
勉強会で得られる知識を元にすれば、8086のエミュレータも作れるみたいだ(実際DOSくらいは動くんだとか)。

とりあえず書いたソースコードはこんな感じだった。

f:id:levelfour:20140605095059p:plain

_人人人_
> F# <
 ̄Y^Y ̄

とまあそんなところだが、F#を使っているのは「好きな言語だと出来る人と出来ない人の差が開きすぎてしまうし、隣の人にも気軽に相談できないから」ということらしい。ごもっともだ。
実際にF#をはじめて書いてみた感想としては、言語としては悪くはないといったところだ。
特に逆アセンブラや8086のバイトコードインタプリタを書く上で最もお世話になったのは、最近の関数型言語にありがちなパターンマッチだ。
これをCのswitch-caseやPythonのif-elif-elseで書くと考えると、身震いしてしまう。
ただ、F#はF#で配列へのアクセス演算子が[ ]ではなく.[ ](ドットが前についている)だったり、所々気持ち悪いところはある。
その辺がないのはやはりHaskellであろうか。

また話がそれてしまったが、参加した感想としては、「もう少しレベルが高くてもいいかな」といったところだ。
それもそのはず、この勉強会は完全な初心者向けだ。
おそらく、アセンブリ言語を経験したことのあるプログラマはバイナリ勉強会の本編へ参加すべきだと思う。
それでも、8086の逆アセンブラインタプリタを書くのはとても楽しかった。
ひょっとしたら自分にもエミュレータが作れるのでは?という気分にさえなった。

時間があるときにもう少し詳しい内容をまとめたいと思う。