Binary Hacks 0x00

O'Reilly Japan - Binary Hacksを読んでみた。

動機

読もうとした同期は、低レイヤに対するコンプレックスがあるから。PythonとかPerlとか色んな高級言語を使用してきたけど、なかでどんな事が起きているのかしりたかったから。C言語を勉強し始めたのもBasicの言語を学んでいて低レイヤに対するコンプレックスから。

こういった高レイヤにある技術を知るのに低レイヤの知識はあったほうが良いので、この本を手に取ってみた。思いのほか面白い内容が書かれていた。読了後、面白いと持ったテクニック(ハック)をチェックしたら、100個中32個あった。

この32個のハックを学習する上で時間があれば、このブログにメモしておこうと思う。

2011/11/12追記:と、思ったけど

ブログの記事にしようと思ったけど、大半が本のコピーになんるので、やめておく。

気になったハック

気になったハックだけメモしておく。
7. lddで共有ライブラリの依存関係をチェックする
14. c++filtでC++のシンボルをデマングルする
18. CとC++のプログラムをリンクするときの注意点
20. GNU/Linuxの共有ライブラリを作るときPICでコンパイルするのはなぜか
22. GCCGNU拡張入門
26. TLS(スレッドローカルストレージ)を使う
31. main()の前に関数を呼ぶ
43. -ftrapvで整数演算のオーバーフローを検出する
44. Mudflap でバッファオーバーフローを検出する
45. -D_FORTIFY_SOURCEでバッファオーバーフローを検出する
46. -fstack-protectorでスタックを保護する
49. 64ビット環境で0とNULLの違いに気を付ける
50. POSIXのスレッドセーフな関数
55. Valgrindでメモリの不正アクセスを検出する
56. Helgrindでマルチスレッドプログラムのバグを検出する
70. libdwarfでデバッグ情報を取得する
72. オブジェクトファイルを自力でロードする
74. GNU lightningでポータブルに実行時コード生成する
76. sigaltstackでスタックオーバーフローに対処する
77. 関数へのenter/exitをフックする
82. straceでシステムコールをトレースする
84. JockeyでLinuxのプログラムの実行を記録、再生する
85. prelinkでプログラムの起動を高速化する
87. gprofでプロファイルを調べる
88. sysprofでお手軽にシステムプロファイルを調べる
89. oprofileで詳細なシステムプロファイルを得る
90. GDBで実行中のプロセスを操る
92. Cのプログラムの中でブレークポイントを設定する
93. Boehm GCの仕組み
95. Portable Coroutine Library(PCL)で軽量な並行処理を行う
96. CPUのクロック数をカウントする
99. 結果が無限大やNaNになる演算でシグナルを発生させる