インラインアセンブラ

名著として話題の「HACKING:美しき策謀-脆弱性攻撃の理論と実際」を読んでる途中。コンパイラとしてgccが使われてるけど、gccインラインアセンブラは扱い難いシロモノであり、ちょっとサラッと流しすぎじゃないかとオモタ。この本のレベルから言えば、とりあえず最適化オプションを付けないことくらいの注意書きくらいは入れとくべきかもしれない。gccではインラインアセンブラで書いたコードまで最適化の対象になるので前後の文脈によって意図しないコードを吐くのはよくあることだったりするのだ。33ページのプログラムでespレジスタの内容を取得する部分、私ならこう書く。

__asm__("movl %%esp,%0":"=r"(esp));

関数にするとスタックフレームが作られるかもしれないので私ならマクロにする。この場合はNOP Sledを使っているので少々のズレは吸収されて関係なくなってしまうけど、ハマり易そうな気がする部分だ。

Hacking: 美しき策謀 ―脆弱性攻撃の理論と実際

Hacking: 美しき策謀 ―脆弱性攻撃の理論と実際