Binary Hacks Rebooted
https://gyazo.com/3815033305d1e2322e86fb0f9cb33cc3
河田 旺、小池 悠生、渡邉 慶一、佐伯 学哉、荒田 実樹 著
本書は低レイヤのプログラミングに関するHack集であり、2006年に発行された『Binary Hacks』の再構築版として書かれました。 低レイヤとは抽象化の度合いが低く計算機と近いレイヤのことを指し、またHackとは巧妙な方法で問題を解決する手法を指します。 現代のコンピュータシステムは重層的です。抽象化のレイヤを重ねることで発展し、無数の機能が実現されています。これらのレイヤは巧みに設計されているため、機能を利用するだけなら各レイヤの動作を詳細に知る必要はありません。それでも私たちは時折、抽象化レイヤを剥がしてシステムの中身を見る必要に駆られます。これは抽象化そのもののメカニズムや、抽象化によって隠蔽されてしまった機能を利用したいことがあるからです。
また、何より抽象化レイヤそのものや、その下側を覗いてみるのはとても楽しいことです。今まで開発者たちが積み上げてきた1つ1つの部品やその組み合わせの中には、常に新しい発見があります。この本はそんな低レイヤの世界を探検するためのさまざまな入口―Hackを89(ハック)個提供します。
本書は、これを元に実際に何かを作ってみようというような本ではなく、低レイヤーにおける様々なトピックの百科事典的な内容という理解をしております。深く理解せずとも、軽く一通り読んでおくことで、将来低レイヤーの分野で「なぜこんな挙動になってしまうのか」と悩んだり、「ちょっとだけ挙動を変えたいんだけれど良い方法はないものか」と思ったときに、それを解決する糸口となってくれるでしょう。
さらに具体的な話に踏み込んでいく場合は、「実践バイナリ解析」のような本に進んでゆくと良いでしょう。 https://www.youtube.com/watch?v=qkEeGghklKs
1章 イントロダクション
#3 Hello, World!再訪
#4 ELFファイルのセグメント
#6 共有ライブラリを検索するディレクトリ
#7 dlopenによるライブラリの実行時ロードとその応用テクニック #11 コアファイルを読む
#14 soldを使って依存する共有ライブラリを後からリンクする #17 LIEFを使ってELFバイナリを書き換える #19 DWARF Expressionを実行する:DWARFⅠ
#21 DWARFで標準出力に出力する:DWARFⅢ
3章 OS Hack
#22 実行可能ファイルとその起動方法
#23 LinuxでHuge Pageを使う
#26 用途に合わせたファイルシステムを選ぶ
#27 特定のプロセスに見せるファイルを差し替える
#28 FUSEを使ってファイルシステムを自作する #34 GNUツールチェインで機械語ファイルを出力する
4章 コンテナHack
#37 Linuxネームスペースでプロセスを分離する
#40 一般ユーザーがrootのように振る舞う方法3選
#42 ユーザーネームスペース内で各種のネームスペースを作成する
5章 デバッガ・トレーサHack
#45 rrを使ってRecord and Replayデバッグを行う #46 サニタイザで低レイヤのバグを見つける:サニタイザⅠ #48 Linuxパフォーマンス解析ことはじめ
#49 ftraceを使ってカーネル内で起こっていることをトレースする 6章 セキュリティHack
#55 ASLR:不正なメモリアクセスに対するセキュリティ機構 #56 ROP:メモリ破壊を悪用するスタンダードな攻撃手法 #63 LibAFLで実装したファザーを改良する
7章 数値表現とデータ処理Hack
#68 整数表現の基礎知識
#69 さまざまな整数表現
#71 浮動小数点例外
#72 浮動小数点数の丸め方を変える
#73 浮動小数点環境を触るコードに対するコンパイラの最適化と戦う
#75 浮動小数点数のアーキテクチャごとの差異に触れる
#77 SIMD並列化したコードを書く
#78 SIMD命令を使ったさまざまなテクニック
8章 言語処理系Hack
#79 NaNを活用して64ビット値にタグ付きの値を格納する
#84 libffiで実行時までシグネチャがわからない関数を呼び出す #85 実行時に機械語を生成する
9章 そのほかのHack
#87 用語集
#88 Binary Hacksに必要なツール
#89 文献案内
索引