夏の暑さも和らぎ、朝晩、涼しくなってきた今日このごろ、皆様いかがお過ごしでしょうか。
セキュリティのお勉強などをしていますと、なんやかやとアセンブリに行き着いちゃったりします。
今までJavaやC#をメインとしたオブジェクト指向言語畑を歩いてきたので、あまりメモリアドレスを直に操作する系のプログラムは組んだことがありませんでしたが、CPUの処理やレジスタ、メインメモリを意識したソースコードは16進数がたくさん出てきてワクワクします。
実際にアセンブリ言語をコーディングしてどうこうする、ということはないのですが、リバースエンジニアリングする時には、アセンブリ言語をある程度理解していないと、さっぱり何をやっているのかわからないということがわかりました。
というわけで、厄年を迎える歳になってアセンブリです。
アセンブリ言語については、ググっていただいた方が正確な情報を得られますが、ここで、「アセンブリ言語ってなんぞや?」という方に、ざっくりと説明します。
プログラム言語はよく知られるC言語やJava言語ほか、非常に多くの言語があります。言語の種類分けにしても様々です。
コンパイルが必要なコンパイル言語、逐次実行するインタプリタ言語。
手続き型言語とオブジェクト指向言語、最近では関数型言語もあります。
そんな様々な分類があるプログラム言語ですが、最も根本的な所で、高水準言語と低水準言語という分類があります。
高水準言語(高級言語とも)とはCやC++、Java、Pythonなど、比較的馴染みのある言語から、COBOLやFORTRANといった非常に古い言語まで、全て人間にわかりやすく書かれた言語のことを言います。
一方低水準言語とは機械語(マシン語とも)です。ただし、本当にコンピュータ(CPU)が理解できる命令は2進数のみなので、そこを16進数とオペコード・オペランドにて(非常にギリギリですが)人間でも書けるようにした言語がアセンブリ言語です。
とても大まかですが、機械語(2進数)に最も近いプログラム言語という認識でOKだと思います。
アセンブリについては、本もたくさん出ておりますし、Webでも様々な情報があります。
今回、アセンブリを勉強するに当たっては、私は紙の本が好きなので、こちらを参考にしました。
しかし、この記事は別にアセンブリの説明をしたかったわけでも、どのように使うか解説したかったわけでもありません。
上の本の最初の方にアセンブリについての説明が記載されているのですが、
「アセンブリとアセンブラとアセンブルがごっちゃの意味で使われている」
という一文がありました。
たしかに、私もこの世界に入って長いですが、アセンブラといったり、アセンブルといったり、言語のことをいっていたり、機械語に変換することをいっていたり、ごっちゃになっており、そう云われて初めて、「確かにアセンブラって適当に使ってる」と認識したのです。
この話はこの書籍だけではなく、Twitterや掲示板などでも、アセンブラという言葉について「アセンブラでアセンブルする言語がアセンブリだぞ」と、当時の私にとっては「ゲシュタルト崩壊だなぁ」的な話題がありました。
ふと、思いました。
アセンブリをアセンブラでアセンブルするというのは
C(言語のソースコード)をコンパイラでコンパイルする
というのと構造的には同じはずです。
「アセンブリ」という語自体がアセンブラとアセンブルに近いので、ある程度混同はあるのかもと思っても見たのですが、それならば「コンパイラ」で「コンパイル」するも近いです。
そこでふと気づいたのです。
「あ、活用形だ」
すでに長ったらしい文章ですが、ここからが本題。
文学部出身の元ガチ文学青年からの考察をしたいと思います。
まず活用形、覚えていますか。
そう、五段活用。
最初、ラ変(ラ行変格活用)かなと思ったのですが、アセンブリは「あり居り侍りいまそがり」には入らないので、やはり四段活用、口語なので五段活用です。
つまり、
未然形:アセンブラ(ない)
連用形:アセンブリ(ます)
終止形:アセンブル(。)
連体形:アセンブル(時)
仮定形:アセンブレ(ば)
命令形:アセンブレ(!)
ほら! (何が?)
当てはまっちゃうんですよ、日本人の口語動詞の活用に!
つまり、現場では
「お前、これ(ソースコード)、アセンブっとけ(命令形:アセンブレ)」
とか
「これじゃ、アセンブレ(未然形:アセンブラ 注:られないのら抜き言葉)ないですよ」
とか
「え? どうする? このままアセンブル(終止形:アセンブル)?」
なんて言葉が飛び交ってたわけですよ。
そういえば、日本には荒ぶる神という概念がありました。ぶるという動詞があるわけです。つまり、アセンブルはアセンぶるわけです。
こうなると、コンパイラとコンパイルの関係とは全く変わってきます。
「これ、コンパイっとけ(命令形:コンパイレ)」とは云わないですし、「このままコンパイル(終止形:コンパイル)?」とも云いません。
コンパイルはあくまで、「する」という動詞が付きます。なので、コンパイラは名詞でいられるのです。
おそらく、世界的に見て、アセンブリをアセンブラでアセンブルという言葉がごちゃごちゃになって、アセンブラ一言で全てを表してしまうことがあるなんて、日本だけだと思います。
なぜなら、英語では「assembly」でモノの名詞、「assembler」で~するモノ(人)の名詞、「assemble」のle(ble)で動詞と、ハッキリしています。間違いようがない。
しかし、日本には「ぶる」という動詞があったばっかりに、アセンブリはら行五段活用にさらされ、いつしか、「アセンブ」という動詞+ら行五段活用で使用されるようになったわけです。
おそらく、アセンブリの考察で、ここまでくだらねぇものは世界で初かもしれません。
こんな記事にここまでお付き合いくださいましたあなた、あなたには文学青年になる素養があります。
中年だろうと老年だろうと女性だろうとキッズだろうと関係ありません。文学青年です。
ぜひ、「荒ぶる詩人の会」にご入会ください。
そんな会は存在しませんが、筆頭詩人の待遇でお迎えいたします。
・・・・・・。
いや、ほんと、どうもすみませんでした。こんなですが、何卒見捨てないでやってください。
それでは今日はこのへんで。アディオスアミーゴ(・∀・)
言語の種類として”Assembler language”(アセンブラー言語)なる言い方が使われている会社があります。そこそこ大手です。
https://www.google.com/search?q=%22Assembler+language%22+site%3Aibm.com
https://www.google.com/search?q=%22%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%A9%E3%83%BC%E8%A8%80%E8%AA%9E%22+site%3Aibm.com&oq=%22%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%A9%E3%83%BC%E8%A8%80%E8%AA%9E%22+site%3Aibm.com&ie=UTF-8
おお、マジっすか!しかも天下のIBM・・・そこそこどころかエライコッチャなところじゃないっすか
そうか、アセンブリ言語ではなくアセンブラ言語ってIBMが言い出したのかな?
貴重な情報、ありがとうございます!