Binary Hacks ─ ハッカー秘伝のテクニック100選


はじめに

本書のテーマは低レイヤのプログラミング技術です。低レイヤとは 「生の」コンピュータに近いことを意味します。

ソフトウェアの世界は抽象化の積み重ねによって進歩してきました。 アセンブラはマシン語に対する抽象化であり、C言語はアセンブラ に対する抽象化です。そして、C言語の上にはさらに、Cで実装され た各種のスクリプト言語が存在します。抽象化は低レイヤの複雑な 部分を隠蔽し、より生産性・安全性の高い方法でプログラミングす る手段を開発者に提供します。

しかし、低レイヤの技術を完全に忘れてプログラミングできるかと いうと、そうもいきません。性能をとことん追求したい、信頼性を できるだけ高めたい、ときおり発生する「謎のエラー」を解決した い、といった場面では低いレイヤに下りていく必要に迫られます。 残念ながら、抽象化は万全ではないためです。

たとえば、 Ruby や Perl のスクリプトがセグメンテーションフォ ルトで異常終了する問題が発生したら、C のレベルまで下りて原因 を探る必要があります。ときには、特殊な問題のために「実行中に 自分自身のマシン語のコードを書き換える」といったトリッキーな テクニックが必要になることもあります。低レイヤの技術を知らな ければ、このような問題を解決することはできないでしょう。

本書の目的は、そういった場面で使えるたくさんのノウハウ 「Binary Hack」を紹介することです。Binary Hack という名称は、 0 か 1、すなわちプログラミングで最も低いレイヤに位置する Binary という概念に由来します。本書では Binary Hack を「ソフ トウェアの低レイヤの技術を駆使したプログラミングノウハウ」と 定義し、基本的なツールの使い方から、セキュアプログラミング、 OSやプロセッサの機能を利用した高度なテクニックまで広くカバー します。

従来、このようなノウハウはあまりまとめられることはなく、「知 る人ぞ知る」的なところがありました。本書の試みはそういったノ ウハウを集めて誰にでも使えるようにすることです。本書では実践 で役立つHackを中心に取り揃えましたが、中にはあまり役に立たな いけどおもしろい、というHackも混ざっています。本書を通じて、 役立つノウハウを身につけるとともに、低レイヤ技術の楽しさを知っ てもらえればと願っています。

本書で扱うこと・扱わないこと

本書では、Binary Hack に不可欠な基本ツールの使い方から、GCC の拡張機能や OS のシステムコール、インラインアセンブラなどを 駆使した高度なテクニックなどの話題を中心に取り扱います。対象 プラットフォームは Unix、とりわけ GNU/Linux にフォーカスして います。Windows の Win32 API を用いたバイナリHackは扱いません が、 Cygwin を用いた GNU ベースの開発環境では本書で取り上げる Hackの多くは適用できるはずです。

本書の構成

1章 イントロダクション

バイナリHackのイメージをつかみます。本書で使用されるさまざま な技術用語などについて解説し、さらにバイナリHackの最も基本と なるツールの紹介を行います。

2章 オブジェクトファイルHack

実行ファイルや共有ライブラリの正体であるオブジェクトファイル についての理解を深めます。まず、Linuxなどで用いられているELF について解説し、さらにライブラリに関するHackを紹介します。オ ブジェクトファイルHackの基本となる GNU Binutils の使い方も解 説します。

3章 GNUプログラミングHack

GNUの開発環境、すなわち GCC, GLIBC をはじめとするソフトウェ アはさまざまな便利な拡張機能を持っています。本章では GNU 開 発環境の力を最大限に引き出すテクニックを取り上げます。

4章 セキュアプログラミングHack

セキュアなプログラムを書くことは現代、最も重要な課題のひとつ です。本章ではセキュリティホールを防ぐためのテクニックや、セ キュリティホールを見つけ出し、退治するための手法を紹介します。

5章 ランタイム Hack

プログラムの実行時にプログラムが自分自身を書き換えたり、自分 の状態を調べることができたらおもしろいと思いませんか。本章で は実行中のプログラムに対して適用できるさまざまなテクニックを 紹介します。

6章 プロファイラ・デバッガ Hack

本章ではプロファイラを使ってプログラムのボトルネックを調べる 方法、およびデバッガの高度な使い方を紹介します。本章ではプロ ファイラとして gprof, sysprof, oprofile を、デバッガとして GDB を取り上げます。

7章 その他のHack

本章では以上の章に分類できなかったHackを扱います。最後のHack では文献案内として今後のバイナリHackの手引きとなる書籍やウェ ブサイトなどを紹介します。


Satoru Takabayashi