最終更新:2012-12-03 (月) 20:59:14 (4162d)  

参考図書/Binary Hacks
Top / 参考図書 / Binary Hacks

http://www.oreilly.co.jp/books/4873112885/

1章 イントロダクション

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

3章 GNUプログラミングHack

  • GCCのGNU拡張入門
  • GCCでインラインアセンブラを使う
  • GCCのビルトイン関数による最適化を活用する
  • glibcを使わないでHello Worldを書く
  • TLS(スレッドローカルストレージ)を使う
  • glibcでロードするライブラリをシステムに応じて切り替える
  • リンクされているライブラリによってプログラムの動作を変える
  • ライブラリの外に公開するシンボルを制限する
  • ライブラリの外に公開するシンボルにバージョンをつけて動作を制御する
  • main()の前に関数を呼ぶ
  • GCCが生成したコードによる実行時コード生成
  • スタックに置かれたコードの実行を許可/禁止する
  • ヒープ上に置いたコードを実行する
  • PIE(位置独立実行形式)を作成する
  • C++でsynchronized methodを書く
  • C++でシングルトンを生成する
  • g++の例外処理を理解する(throw?編)
  • g++の例外処理を理解する(SjLj?編)
  • g++の例外処理を理解する(DWARF2?編)
  • g++例外処理のコストを理解する

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

  • GCCセキュアプログラミング入門
    • ftrapv?で整数演算のオーバーフローを検出する
  • Mudflap?でバッファオーバーフローを検出する
    • D_FORTIFY_SOURCE?でバッファオーバーフローを検出する
    • fstack-protector?でスタックを保護する
  • bitmask?する定数は符号なしにする
  • 大きすぎるシフトに注意
  • 64ビット環境で0NULLの違いに気を付ける
  • POSIXスレッドセーフな関数
  • シグナルハンドラを安全に書く方法
  • sigwait?非同期シグナル?を同期的に処理する
  • sigsafe?シグナル処理?を安全にする
  • Valgrindメモリリークを検出する
  • Valgrindでメモリの不正アクセスを検出する
  • Helgrind?でマルチスレッドプログラムのバグを検出する
  • fakerootで擬似的なroot権限でプロセスを実行する

5章 ランタイムHack

  • プログラムがmain()にたどりつくまで
  • システムコールはどのように呼び出されるか
  • LD_PRELOADで共有ライブラリを差し換える
  • LD_PRELOADで既存の関数をラップする
  • dlopenで実行時に動的リンクする
  • Cでバックトレース?を表示する
  • 実行中のプロセスのパス名をチェックする
  • ロードしている共有ライブラリをチェックする
  • プロセスや動的ライブラリがマップされているメモリを把握する
  • libbfd?でシンボルの一覧を取得する
  • C++のシンボルを実行時にデマングルする
  • ffcall?でシグネチャを動的に決めて関数を呼ぶ
  • libdwarf?でデバッグ情報を取得する
  • dumper?で構造体のデータを見やすくダンプする
  • オブジェクトファイルを自力でロードする
  • libunwindでコールチェインを制御する
  • GNU lightning?でポータブルに実行時コード生成する
  • スタック領域のアドレスを取得する
  • sigaltstack?でスタックオーバーフローに対処する
  • 関数へのenter/exitをフックする
  • シグナルハンドラからプログラムの文脈を書き換える
  • プログラムカウンタ?の値を取得する
  • 自己書き換えでプログラムの動作を変える
  • SIGSEGVを使ってアドレスの有効性を確認する
  • straceでシステムコールをトレースする
  • ltraceで共有ライブラリの関数呼び出しをトレースする
  • Jockey?Linuxのプログラムの実行を記録、再生する
  • prelinkでプログラムの起動を高速化する
  • livepatch?で実行中のプロセスにパッチをあてる

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

  • gprofでプロファイルを調べる
  • sysprof?でお手軽にシステムプロファイルを調べる
  • oprofile?で詳細なシステムプロファイルを得る
  • GDBで実行中のプロセスを操る
  • ハードウェアのデバッグ機能を使う
  • Cのプログラムの中でブレークポイントを設定する

7章 その他のHack

  • Boehm GCの仕組み
  • プロセッサのメモリオーダリングに注意
  • Portable Coroutine Library(PCL)で軽量な並行処理を行う
  • CPUのクロック数をカウントする
  • 浮動小数点数のビット列表現
  • x86が持つ浮動小数点演算命令の特殊性
  • 結果が無限大?NaNになる演算でシグナルを発生させる
  • 文献案内