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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

AD
本日・明日に東京・多摩で開催されているオープンソースカンファレンスに

出展します.



セミナー「バイナリで遊ぼう!」,ライトニングトークなどやらせていただきます.

展示はアセンブラ短歌,バイナリかるた,アセンブラかるた,

熱血!アセンブラ入門など.



AD
「フィーリングで読むアセンブラ入門」という本をずっと書いていましたが,
「熱血!アセンブラ入門」というタイトルでようやく発刊されることになりました.
今週末に書店に並ぶと思います.

脱稿自体は2013年明けにできていて,出る出ると言って出てなかったですお待たせしたかたすみません.

まあちょっといろいろあって延び延びになっていたのですが,このたび秀和システムさんにお世話いただき
発刊までこぎつけました(まだ出てないけど).800ページもの大作を削減すること無く引き受けてくださり,
また迅速に出版していただき,ありがとうございました.

本書はドキュメントを調べてというよりも,実際に手を動かして調べた結果をメインに執筆しています.
執筆する上で様々なかたがたと有益な情報交換をさせていただいています.
ご協力いただいたかたがた,ありがとうございました.

内容は,「フィーリングで読むアセンブラ入門」のそのまんまです.タイトルは変わりましたが,内容を削減したり
路線を変更したりはしていないです.執筆した原稿がフルに入っていますので,なかなか読みごたえはあるかと.
(まあタイトルは,当初とはフツー変わるものなので)

書籍中では,40種類のアセンブラを扱っています.メインとして扱っているのは6種類で,第1部では
それらを横並びにして見ています.普通のアセンブラ入門書は単一アーキをひたすら説明するのが
普通だと思うのですが,本書では複数種類を,というより,とにかくたくさんの種類を横並びにして
読んでみることに注力しています.

この「複数種類を横並びにして」っていうのがミソで,単一のアーキのアセンブラを見るだけでなく,
複数のアーキのアセンブラを横並びにして見ることで,CPUやアセンブラはさらに理解しやすくなると
いうか,新たに見えてくるものがいろいろあるかと思います.
「あー,これってこっちのアーキでもおんなじじゃん」みたいな感じで.

実際に手を動かして調べた結果がメインなのですが,アセンブラの出力環境を自分のPC上に構築して,
試してみることもできます.第3部の頭で説明しています.あと環境構築済みのVMイメージとかを
サポートページで配布しています.

私的にいちばん面白いのは,第3部のシミュレータ対応で,GDBのシミュレータのソースコード見て各種アーキの
対応して動かしていく,というところです.事実を説明するだけでなく,実際の調べものや思考の過程が書けたので,
自分的にはよかったと思っています.(そういう記事が好きなので)

あとタイトルは,なかなかインパクトある感じになりました.笑

秀和システムの本書の案内ページ

Amazonのページ

書籍サポートページ

AD
ツールとプログラミングの本を書きました.本日発売です.
久々の(考えてみたら,初のか!?)初心者向け本です.

開発ツールを使って学ぶ!C言語プログラミング

各種開発ツールを触っていじりながらC言語プログラミングも体験してみるという内容です.
プログラミングを勉強する際には,実際にはプログラミングだけでなく各種ツール類の操作も必要になるので,そうしたひととおりのツール操作とプログラミングの両方を触って広く浅く体験していくという本があったらいいんじゃないかなーと思って書きました.
シェル操作,viエディタ,nano,make,diff,patch,make,git,gdb,Perlなど説明しています.

CentOSのVMイメージも同時に配布しているので,実際にPC上で(VM環境で)試しながら触ってみることができます.

薄く広く扱っているので,それぞれのツールやC言語の説明は浅いし網羅性もありません.
が,プログラミングやLinuxディストリビューションの初心者のかたが,いろいろひととおり体験してみる,というためにはいいかと.

勉強会とかで説明とか演習とかするときに,CUI操作をベースに説明することが多いのですが,そうしたときにそもそもCUIでのコマンド操作が不慣れだと,本題に入る以前のところで進まなくなってしまいます.そういうのをなんとか対策したいなーという思いもありました.
(本があれば,今後は「この本で説明してあるCUI操作くらいはできるものとして話を進めるので,不安だったら本を確認しておいてください」と言うことができる.初心者は事前に本を読んでレベルを確認して,操作に慣れておくこともできる)

いくつか告知です.

今更ですがInterface誌2014/08号に記事を書きました.
pkttoolsの紹介などもあります.

あと,9月に行われる以下イベントに登壇します.

SECCON x CEDEC CHALLENGE 表彰式 / 今昔ハッカー対談

ゲームセンターあらしのすがやみつる先生とのトークセッションです.

あとちょっと前の話ですが,pkttoolsというツールを作成し公開しました.
パケットのRAWデータを送受信できます.

http://kozos.jp/software/index.html