OSC東京2015春のLTで話した「ハロー・ワールド入門」ですが,「ハロー "Hello, World"」というタイトルで本日発刊されました.

Amazonのサイト
秀和システムのサイト
書籍サポートページ





内容はLTでしゃべったとおりで,以下のようなわずか7行のハロー・ワールドのプログラムをとことん解析する,というものです.

#include <stdio.h>

int main(int argc, char *argv[])
{
printf("Hello World! %d %s\n", argc, argv[0]);
return 0;
}

■ 表紙について

タイトルも表紙もなんだか爽やかな感じで,技術書とは思えない.笑
旅行のガイドブックか何かのようだ.

電車の中とかでフツーに読んでても違和感無い!?

■ 対象とする読者

対象読者は以下のようなかたです.

入門書でハロー・ワールドを説明されたとき,printf()の先はどうなっているのか? とかmain()が呼び出される前には何が行われているのか? とかmain()からreturnしたらどこに返るのか? といった疑問を持ったが,それらの疑問はそのまま棚上げにされ,放置されている.改めて知りたい,というひと.

動的解析や静的解析,Linuxカーネルやライブラリなどのコードリーディングというものに興味があるしやってみたいが,どこから手をつけたらいいかわからない,最初の一歩がいまいち踏み出せない,というかた.
(とにかく手を動かす系の本なので,初心者もとりあえず手を動かして,解析作業やコードリーディングを体験することができます)

プログラムがどのように動いているのか,OSは何をしているのか,といったことを知りたい人.とくに,机上の理論や図を使った抽象的な説明でなく,実際の現物ベースで知りたい人./usr/includeにあるヘッダファイルや/usr/libにあるライブラリが,誰によって提供されどのようにしてシステムが構築されているのかなどを知りたい人.

大学や専門学校でのOS系・解析系の授業の教科書として.
技術的な内容もいろいろ含んでいますし,OSの全体構成(カーネルとライブラリとアプリケーションの関係)について理解できるので,OSの授業とかにいいんじゃないかと思います.
大学等の講義で使うことを意識して,全12章にしてあります.(1回の講義で1章のペースで,半期で終わる感じ)

■ 書いた経緯

上のようなハロー・ワールドについてA4用紙で5枚のレポートを書け,という課題が大学かどこかで出たことがあるという話を聞いたことがあります.

要するに,単なる7行のプログラムだとしても,それくらい奥が深いということなのですが,だったら1冊の本が書けるんじゃないかなあと思って書いてみたものです.

■ 内容について

内容ですが,まずハロー・ワールドの実行ファイルを動的解析することでprintf()の処理の先を追い,文字出力が行われる瞬間(システムコール命令の発行)をとらえます.
次にLinuxカーネルのソースコードを見て,writeシステムコールがどのように処理されるのかを探ります.
さらに標準Cライブラリのソースコードを見て,システムコール命令の発行がどのように行われているのかを確認します.

さらにmain()が呼び出される前のスタートアップの処理を探って,main()からreturnする先の処理を探ります.exit()で何が行われているのかなどを探ります.
「main()の前にはスタートアップという処理がある」という話を漠然と聞いたことがある,という人はいるかと思います.しかしそのスタートアップを実際に見たことがあるという人は少ないですし,説明してある書籍もあまり無いです.このあたり,詳しく調べて説明しています.

あとはstdio.hなどのヘッダファイルがどこにあって誰によって提供されているのかとか,OSの仕事は何なのかとか,標準Cライブラリは誰によって提供されていて,いわゆるLinuxディストリビューションと呼ばれているシステムはどのように構築されているのかとか(GNU/Linuxの話とか),実行ファイルを解析してみるとか,最適化についてとか可変長引数の実現方法などについても説明しています.

ハロー・ワールドについて,かなりお腹いっぱいになる感じだと思います.

他にもシステムコール処理をLinuxカーネルとFreeBSDカーネルで比較したり,x86とARMで比較したりといったクロスプラットホームの話題もあります.(このあたりが私らしいところか)

秀和システムの書籍のサイトで,目次を確認することができます.
興味のあるかたは,ぜひ目次を見てみてください.

■ 発刊されて

内容的にはなかなかコアな内容で,類書の無い面白い感じに仕上ったかと思います.

理論だけの説明でなく実際に手を動かしてみて,現物を見てみた後で理論的な説明をする,調べた結果だけを見せるのではなく調べかたをちゃんと見せる,というのがだいたい私が書きたい書き方なのですが,バッチリそういう感じに仕上りました.

あと私の書き方の特徴なのですが,同じことを何箇所かで説明していたりします.(本書の場合は,システムコールラッパーの役割とかFreeBSDのソースコード配置などがそう)
これはまず一度説明して,いろいろ理解が進んだところでさらにもう一度説明することで理解を深める,というように書きたいからです.
この手の勉強は義務教育のようにカリキュラムがバッチリ決まっていて順番通りに進めていけばいい,というものではなく,Aを説明するためにはBの知識が必要で,でもBを説明するためにはAの知識が必要,ということはよくあります.なので,同じことを何度も説明するというのは,個人的には悪いことだとは思わないので,そういうふうに私は本を書いています.
なので読む人によっては「くどい」と感じられたりしますが,逆に「何度も説明してくれてありがたい」という意見をいただくこともあります.

あと表紙は爽やかでお気に入りですね.

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

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

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

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

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

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

AD
アセンブラ短歌本が届きました.
オンデマンド印刷だけど,なかなかきれいです.

アセンブラ短歌本

軽く読みなおしてみましたが,なかなか面白いですね(自画自賛).紙の本で読むとまた新鮮.
普通は校正作業ではもうほんとに飽き飽きするものですが(なにせ同じ本を何十回と読みなおすことになるので),
この本はそんなことなく,校正もたのしかったですね.
私ひとりでは書けないような,いろんなネタを書いていただいた共著者の方々にも感謝です.

こちらは索引.「リトルエンディアン」「レジスタ」「論理積」といった技術用語に混ざって,
「躍動感」「様式美」「浪漫主義」「若山牧水」といった(およそ技術書とは思えない)言葉が入っているのが粋です.

索引

巻末には「熱血バイナリアン十訓」もあります.
あと参考文献には「熱血バイナリアン十訓」の出典も.

AD
OSCのLTなどいろんなところで話していた「アセンブラ短歌」に関してですが,アセンブラ短歌の書籍が無事に先行予約開始になりました.

31バイトでつくるアセンブラプログラミング ~アセンブラ短歌の世界~

マイナビで特集ページも組まれています.

普通の解説書では飽き足らないあなたのために - Mynavi Advanced Library


KOZOSのブログ


内容はまあ,アセンブラ短歌です.笑
「アセンブラ短歌」を知らないかたのために一言で説明しますと,「五・七・五・七・七の三十一バイト(みそひとバイト)から成る 機械語コードでプログラムを書いてみるという近未来の文化的趣味」というものです.

「なんの意味があるのか?」と言われるとまあ面白いから,という感じなのですが,いちおう技術的な意味もあります.アセンブラ短歌のホームページ の「アセンブラ短歌の意義」で説明しているのですが, 実はセキュリティ教育の意味があったりします.というのはまずアセンブラを理解することや,加えてこのような特定のバイト数でプログラムを書いたり,決まった制限の中でプログラムを書く技術というのは,脆弱性をついて送り込まれる攻撃コードを理解するために有用だからです(そして防御のためには,攻撃手法をまずは理解することが重要).ところがアセンブラ・プログラミングは空洞化してしまった技術分野で,勉強するのがちと難しくなっているように感じます.とくに「遊び感覚で,楽しく勉強する」という題材が少なく,とっつきにくいイメージがあります.そういう現況を打破するために考案したのが「アセンブラ短歌」です.


書籍中ではx86アセンブラの簡単な解説と説明から始まり,文字列を出力するだけの簡単なアセンブラ短歌から,徐々に高度なプログラム(というか,短歌)を扱っています.特定の命令を各句の末尾に(しかも,意味のある命令を)置くことで韻を踏んでみたり,短歌でなく川柳(川柳は5・7・5)を作ってみたり,電卓もどきを作ってみたり,かるたを作って競技用に難読化してみたり,Quineをやってみたり,内容は様々です.

アセンブラというと難解なイメージがありますが,実は書籍中で使っているアセンブラ命令は数少なく,内容的にもそれほど複雑なプログラムになることもなく(所詮31バイトのプログラムなので),初心者が遊び感覚でアセンブラを学習する良い題材になるかと思います.

アセンブラの解説書は多数ありますが,なんだか難しくてとっつきにくいなあ,読んでても眠くなっちゃうし,もっと遊び感覚でできないかなあ,という初心者のかたにぜひ読んでいただければと思います.

とはいってもまああくまで遊びで,遊びなのだけどそれが勉強にもなればそれって良い趣味になるよね! って感じの考えです.なので「これでほんとに勉強になるのか?」「実用的か?」などあまり肩肘はって考えず,なんか面白そうくらいの感覚でやってみていただければと思います.やってみると,独特のパズル感覚があって実際結構面白いし熱中します.必死になって命令セットを調べたりするので,勉強にもなります.笑 なので初心者に限らず,フツーにアセンブラ使っているよ,というかたもぜひどうぞ.

メインは私が書いていますが,今回は共著で書かせていただいており,執筆陣がなかなか豪華です.セキュリティ・キャンプでお馴染み,最近は「たのしいバイナリの歩き方」でも有名な愛甲健二さん,SECCON実行委員で活躍中のネットエージェントの松田和樹(eagle0wl)さん,Shibuya Perl Mongersやセキュリティ・キャンプ,SECCON実行委員長など広範囲に活動されている竹迫良範さんらにも書いていただいています.書籍ホームページで目次を見ていただければわかるのですが,それぞれの得意分野で,64ビット環境でのアセンブラ短歌や6502でのアセンブラ短歌,MS-DOSでのアセンブラ短歌,表示可能文字だけを使ったアセンブラ短歌など書いていただいてます.(とくに松田さんの,「エクストリーム・アセンブラ短歌」がすごい)

あとメインはLinux/x86をターゲットにしているのですが,組込み向けにRXマイコンでのアセンブラ短歌や68HC11でのアセンブラ短歌なども扱っています.なので組込み系のかたもぜひ.

2011年にSoftwareDesign誌で連載していた「全国津々浦々! 勉強会&イベント探訪記」が電子書籍になりました.とはいっても9月末に出版されているので,すでに2ヵ月前の話なのですが.

KOZOSのブログ-イベント探訪記カバー

「全国津々浦々! 勉強会&イベント探訪記 完全版」の出版社のページはこちら


内容は,まあ全国旅日記の勉強会版です.全国各地のいろんな勉強会に参加して紹介しています.「勉強会ってどんな感じ?」「勉強会に行ってみたい!」と思っているかたは参考にどうぞ.連載時に読んでいただいたかたも,写真がカラーになりカット記事を収録して書き下ろし章も追加されているのでぜひどうぞ.価格は雑誌で既出の内容ということで,500円と安めにさせていただきました.(700ページ弱なのでだいぶお得価格かと)

勉強会の紹介とは言っても単なる参加レポートではなく,私自身が出展や発表をすることで,舞台裏みたいなものを多く紹介するようにしています.また現地での人との繋がりや,往路・復路,食事,懇親会の様子なども紹介することで旅日記っぽくしています.とくに食事は雑誌では(技術誌なので当り前ですが)カットになったものが多かったのですが,今回収録できたのでよかった.

書籍の紹介にもありますが,連載時には誌面の都合でカットされた写真や記事をすべて収録しています.感覚的にはだいたい5割増しくらいかなあ.電子書籍なので,写真もすべてカラーです.

さらに書き下ろしの章を追加しています.新章では6月のオープンソースカンファレンス名古屋 と,6~7月の間で2回行われた SECCON の問題作成合宿の様子を紹介しています.国内最大規模のセキュリティカンファレンス・SECCONのCTF問題はこうして作られています!

今回は技術書の電子書籍で有名な達人出版会 にお願いしたのですが,達人出版会の電子書籍はいわゆるDRMフリーのため,好きな端末で読めます.PCでもスマフォでもOKですし,(もちろん個人の利用の範囲で)自由にコピーできるので便利ですね.私はKindle端末と楽天koboとFreeBSDのPCで読んでます.DRMフリーいいわ~.とっても便利.