見出し画像

アセンブリの勉強が楽しい

 情報処理安全確保支援士の資格勉強をしている私。座学だけでは物に成らんと思い、Kail Linuxを使ってハッキングのお勉強を開始。その大前提として、アセンブリについて軽く、本当に軽く勉強したのでまとめたい。
 意外と楽しいのだな、これが。

アセンブリとはなんぞや

 プログラムをやった人であれば聞いたことがあるかもしれない。もしくは、学校でのIT系の勉強で聞くことがあるかもしれない。そもそもアセンブリとは、バイナリデータ(2進数の0・1で構成されたデータ)で書かれる機械語を人間にもわかりやすいように、文書っぽくしたもの。

mov rdi, 1

といった感じ。これはrdiレジスタに1を入力するコード。

 ちなみにレジスタとは、CPUが持っているキャッシュメモリのこと。よくPCのスペック表などでキャッシュと書かれるやつで、メモリとは別物。またレジスタにはそれぞれ役割があるので、それも理解しないとアセンブリはてんでわからない。

メモリ空間を直に触っている感覚

 C言語よりも濃い、メモリの世界。それがアセンブリには広がっている。アセンブリではメモリをアドレスで見たり、アドレスで入力先を指定したりとまぁとにかくメモリをベタベタと触る。それ故にバグを踏むとカーネル(コンピュータのシステムの心臓部)に突っ込んでしまったりするわけだが.... 
 アセンブリの勉強で、ダンプという操作を扱ったのだがこれが面白い。ダンプとは、アセンブリの実行内容を機械語の実動作内容を対で表示させる操作。これを行うと、命令やデータが格納されているメモリアドレスから、プログラムが機械語でどうやって書かれているかまで丸わかりなのだ。なんと言うのだろうか、”分解している感”がたまらない。現在主流の高級言語たちが抽象化し、見えないようにしてくれているメモリのカオスをまざまざと見ることができる。ヒープとスタックのアドレス管理やら、レジスタのbit数やらといった、それはまあDeepな世界に入って行ける。

 普通のIT職を目指す人にとっては、最早全くと言っていいほど無縁。それほどにDeepな世界です。アセンブリは。分解することが好きとか、コンピュータシステムの構造の根本を知りたいなんて人にはおすすめ。
 この記事を読んで新たにアセンブリの勉強を始めたいなんて人は稀有だろう。しかしそんな人に向けてアドバイスをするなら、C言語大前提の世界なのでまずC言語をマスターしてください。本来ならば、アセンブリを更に抽象化したのがC言語なので、アドバイスの言っていることが意味不明。しかし、C言語 → アセンブリ → ダンプ(機械語)と具象化していくことが勉強方法の1つとして存在する。なのでC言語がわかるようになっていた方がいいと思う。私の勉強方法もこの例の通りだったし。

 さて、今回はアセンブリ&機械語チラ見勉強が意外と楽しいというお話。今後バッファオーバーフローなどのセキュリティ関係知識は、アセンブリを通して理解を深めていこうと思います。

では、また


この記事が気に入ったらサポートをしてみませんか?