ちょっと時間ができたので,たまには最近思うことでも書こう.

低レイヤーが好きで勉強してきて,良かったなーと思うことが最近いろいろある.

まあ要するにアセンブラとかCPUアーキテクチャとか勉強してきてよかったなーという話なのだけど,このあたりのレイヤーは,そんなところ勉強しても役に立たないとか,なんでそんなのいまさらやるの,とか言われがちな分野ではある.笑

が,自分自身はそんなことは微塵にも感じていなくて,むしろ勉強してきてよかったなーと思うし,そしてこれからも勉強し続けていくと思う.(まあでも別に,他人に対して「低レイヤーを勉強したほうがいいぞ!」とか言うわけではないです.僕自身はそうだと思う,というだけ)

とくに思うのが,最近セキュリティ関係とかで,勉強会の資料や演習のサンプルを作ったりするときだ.

たとえばバッファオーバーランの脆弱性の実演みたいなものとか,そういうのを勉強会とかで出したいときだ.

こういう演習サンプルって,説明のときには「適当に作ったサンプルですが」とか口では言ったりはするのだけど,実際にはほんとに適当に作ったものを使っているわけではなくて,僕の場合は,カリカリにチューニングして作成していたりする.

見た目は数十行のシンプルなサンプルでも,実際にはいろんな細かい配慮がされていたりするわけです.
(まあそれでも凡ミスがあって,いかにも雑に作ったみたいに見えてしまうことも多いのだが.笑)

例えばコンパイルオプションとかをチューニングして所望の出力が得られるようにしていたり,コンパイラが出力するアセンブラを意識しながら元のC言語ソースをコーディングしていたり,場合によっては所々をアセンブラや機械語コードで直接書くことで細かくチューニングしていたり,そんなことをしている.

そしてこの手の細かいチューニングは,そもそもの原理をちゃんと知っていないとピンポイントで行えないものが多い.本当に適当に作ったとしたら,なかなか思い通りにはならないものだったりする.

こういうのは,低レイヤーをいろいろ勉強していればこそのものだと思う.やってると結構楽しくて,CPUやコンパイラに直接触れているような面白さがある.

しかし,別にそうしたチューニングができるようになることを目指して低レイヤーを勉強してきたわけでは,実はなかったりもするんだよなあ.

好きでやってきたら,気がついたらそういう感じになっていたというぐあいだ.

ぼくは基礎技術というのを非常に大切にしているのだけど,そういう基礎技術というのは,新しいことやあまり誰もやっていないこと,あまり資料が無いようなことをやろうとするときに,すごく役に立つ.

そういうことをするときには,なにせ参考にできるサンプルや資料が無いので,自分で試したり考えたりして,自力でなんとかするしかないというところが多々ある.

基礎技術というのは,そういうときの地力になる.
スポーツマンにとっての基礎体力みたいなものなのかな.

ググッて出てくるようなことっていうのは,そもそも誰でも知っているような情報であるわけで,本当に知りたいことというのは,ネット検索では得られないものだと思う.

結局のところ,役に立つか立たないかというのは,いかに自分が役立てるかによるわけで,役に立たないと自分で決めつけたらそりゃ役に立たないだろうし,そうではなくて役に立てようと自分なりにいろいろ考えて工夫することが大切なわけだ.

なので低レイヤーを勉強してきてよかったなーと今自分が思えているということは,自分はかろうじてそういうふうになんとかやってこれてるのかなあ,よかったなあ,なんて思う.