文献案内
Binary Hack の参考になる文献を紹介します。 Hack #100 の「文献案内」の簡略版です。
書籍
Write Great Code
「グレートコード」を書く上で必要となるコンピュータの基礎的な 知識を幅広く扱った内容となっています。「ハードウェアを知り、 ソフトウェアを書く」という副題の通り、本書は CPU、キャッシュ、 メモリ、ストレージ、周辺機器といったハードウェアの話題に多く の紙面が割かれています。本書 Binary Hacks を読みこなす上で必 要になる基礎知識が多く含まれています。
詳解UNIXプログラミング
Unix のシステムコール・ライブラリ関数ひとつひとつについて詳 細に解説した貴重な本です。普段何気なく使っているシステムコー ルも、よくよくこの本の説明を読んでみると、さまざまな注意事項 や意外な使い方などの発見があるはずです。歴史的背景についての 記述も豊富であり、標準規格の解釈に厳密なのも特徴です。 Unix でシステムプログラミングをする上で必携の本です。
コンピュータの構成と設計
著者のパターソンとヘネシーから「パタヘネ」という呼び名で有名 な名著。コンピュータの基本概念から、命令セット、算術演算、性 能評価、プロセッサやコンピュータシステムのアーキテクチャを解 説しており、ハードウェアとソフトウェアとの相互関係を理解する ことができます。ソフトウェア側からだけでなく、ハードウェア側 からみてどのように実行されるかを理解するために必要な知識を得 ることができます。
Linkers & Loaders
リンカとローダについての数少ない専門書です。リンカとローダの 仕組みだけでなく、システムプログラミングに役立つ知識も得られ る本です。前半では、リンカに関係する OS の仕組みについて、た とえば仮想メモリとファイルのマッピングの関係や、マップ時の書 き込み時コピーの仕組み、といった内容が歴史的経緯とともに説明 されています。
デバッガの理論と実装
その名の通りデバッガの理論と実装についての解説書です。特定の デバッガに限定した内容ではなく、各種 OS のデバッガや、 Java のデバッガなど、さまざまなデバッガに関する話題を幅広く扱って います。デバッガの実装は実行環境の OS やプロセッサに密接に関 わっていますが、ブレークポイントやステッピングなどの基本的な コンセプトはどのデバッガにも共通しています。
ハッカーのたのしみ
バイナリといえば二進、二進といえばビットです。ビット単位の操 作を含め、細かく繊細なさまざまな操作について述べている良書で す。
セキュリティウォリア
情報セキュリティ技術一般を扱っている書籍です。3章の「Linuxリ バースエンジニアリング」には、本書 Binary Hacks を読む上で参 考になる記述があります。たとえば、nm, gdb, lsof, ltrace, objdump 等の基本的なツールの使い方の解説、objdumpによる逆アセ ンブル結果の読み方の解説、ptrace(2)を利用した簡単なツールの開 発例、GNU BFD の活用例などが書かれています。
JIS X 3010:2003 プログラム言語C
最新のC言語規格である ISO/IEC 9899:1999 (通称:C99) を、日本語 に翻訳したものです。CコンパイラをHackする際には必携の書といえ ます。この規格書には、他ではなかなか知ることのできない微妙な 部分も含め、C言語の全てが記載されています。
財団法人 日本規格協会のWebStore から購入可能です。また、 日本工業標準調査会の「JIS検索」で X3010 を検索すると、PDFの閲覧ができます (印刷はできません)。
インターネット
How To Write Shared Libraries
Linux の共有ライブラリ (動的共有オブジェクト) に関する決定版 的なドキュメントです。Linux に ELF バイナリが導入された歴史的 経緯に始まり、共有ライブラリのメリット・デメリット、動的リン クの仕組み、性能の改善方法など、さまざまな話題が凝縮されてい ます。共有ライブラリを用いた Hack を行う際に必要な情報が網羅 されているといっていいでしょう。
The Single UNIX Specification, Version 3
UNIXの規格です。The Single UNIX Specificationは、UNIXの深い学 習に有用なドキュメントです。特にXSHのAPI一覧は、眺めていると 思わぬ発見があるものです。 mozdev.org では、この規格を Firefox の検索バーから検索するためのプラグインが配布されています。 mozdev.org のホームページから Single UNIX Specification で検索してください。
arbitrary unix stuff
各種 Unix の #! の実装や各種シェルの内蔵 echo コマンドの動作 など、 Unix に関するトリビア的な情報が満載のサイトです。Unix のさまざまな機能のディテールに興味のある人向けのサイトです。
マイクロプロセッサアーキテクチャマニュアル
IA-32(x86)、EM64T、IA-64(IPF)
- インテル 日本語技術資料のダウンロードページ
Intel のマニュアル、アプリケーション・ノート、データ・シートの日本語翻訳が集められているページです。ソフト開発を行う時に欠かすことのできない "IA-32 Intel Architecture Software Developer's Manuals"、最適化手法の解説の日本語訳がダウンロード可能です。最新の英語版ドキュメントへのリンクもあり便利。
AMD x86、AMD64
- AMD Developer Central - Documentation
本家 AMD64 の命令セット仕様書である "AMD64 Architecture Programmer's Manual" や Athlon64・Opteron 向けの最適化ガイドがあります。
Alpha
- Alpha technical documentation library
Alpha 21x64 シリーズの命令セットを解説した "Alpha Architecture Handbook"、"Compiler Writer's Guide for the Alpha 21264" や個々のチップの仕様がダウンロード可能です。 - Tru64 UNIX Version 4.0F Online Documentation
"Digital UNIX Assembly Language Programmer's Guide" という Alpha の ABI を解説した重要資料があります。
ARM
- ARM: マニュアルダウンロード
各種日本語マニュアルがダウンロード可能なページ(要無料登録)です。命令セットの解説は「RealViewコード生成ツールv2.0 アセンブラガイド」に含まれています。
MIPS
- MIPS IV Instruction Set 命令セット
- MIPSpro N32 ABI Handbook IRIX の ABI の解説
- MIPSpro Assembly Language Programmer's Guide アセンブラ
- MIPS Technologies, Inc日本語サイト MIPS32、MIPS64 の仕様
PA-RISC
PowerPC
- IBM Microelectronics - PowerPC
命令セット仕様書、IBM の PowerPC プロセッサのユーザーマニュアルがダウンロード可能です。 - Freescale Semiconductor - PowerPC Processors
Apple社 の Macintosh に PowerPC を提供していた旧モトローラの半導体部門が分離独立した会社のページです。Documentation の項から各プロセッサのリファレンスマニュアル等がダウンロードできます。
SH
- ルネサステクノロジ ドキュメント
命令セットの解説等、各種日本語マニュアルがダウンロード可能です。
SPARC
- SPARC International, Inc. - Standards
SPARC 標準団体のページです。命令セット("The SPARC Architecture Manual V8" & "V9") や ABI 仕様書がダウンロード可能です。 - UltraSPARC Processors Document
Sun Microsystems の UltraSPARC プロセッサのユーザーガイドがダウンロード可能です。 - OpenSPARC.net
UltraSPARC T1チップのプロセッサコードと仕様がオープンソース化する OpenSPARC Project のページです。UltraSPARC のアーキテクチャ仕様書や仮想化機能の仕様書がダウンロード可能です。
S/370
"Principles of Operation" (通称 PoO) は、IBM System/360 (S/360) のアーキテクチャマニュアルです。製品のマニュアルだったのですが、アーキテクチャの教科書としても広く使われてきました。 S/360 が S/370、ESA/390、ZSeries と進化するのに対応し PoO も改訂されています。