2005-01-01から1年間の記事一覧
というblogを見つけました。こちらです。組み込みと銘打っていますが、C開発者向けにC++のpitfallを解説した記事として大変に有益と思います。C++規格の章番号を出して解説してくれているのは大変goodですね。 個人的には9月の記事、8月の記事がツボ。
次のC/C++なコードには問題があります。 #define A_SIZE 6 static int a[A_SIZE]; void vuln(int n, int val) { assert(n < A_SIZE); a[n] = val; }配列アクセスの添字となる変数aの方が signed int なのが問題です。nとして負数を渡すと面白い(というか恐…
現実的な解決策 in C++ でも、クイズに書いたようなオーバーフローって、なかなか防ぎきれないんですよね。 技術力を向上する がんばってレビューする 静的なコード検査ツールを使う(QAC++とか、PolySpaceとか、これとか) などが王道かとは思いますが、学習…
前回(クイズ)の続きです。自分で解いてみた結果を貼っておきます。(8)とか(9)はそれなりに面白いかと。
えとーさんに教えてもらって参加した SEA & FSIJ 合同フォーラム2005年12月 「GCC行く年来る年」で伺ったところによると、GCCの4.1でIBM東京基礎研のProPoliceがマージされて、しかもx86だけでなく、x86_64, ppc, sparc, s390, そしてshがサポートされるそう…
void vuln(std::size_t nelem) { int* p = new int[nelem]; std::memset(p, 12345, nelem); }上記の関数には整数オーバーフローに起因するヒープベースバッファオーバーフローの脆弱性があるんですが、どこがまずいかわかりますか? まずいのはnewしている部…
gcc -ftrapv 最近のGCC(>=3.x)には-ftrapvというオプションがあって、これを有効にすると「符号あり整数同士の加算・減算・乗算でオーバーフロー/アンダーフローが発生したとき、プロセスをabort()」してくれます。例えば、INT_MAX + 1 とか INT_MIN - 1 と…
古来より、関数スコープの静的なオブジェクトを作るのは危険 void foo() { static CBar bar; // こんなの とされています。foo()が初めて呼ばれたタイミングでbarのコンストラクタが走るわけですが(C++規格でそう決まっている)、foo()の初回呼び出しが2つの…
woさんに教えていただいた件 (http://d.hatena.ne.jp/w_o/20051203#p3)、遅くなりましたが、現象確認しました。次のコードで再現しますね。 $ cat a.cpp extern "C" { void b(); void a() { throw 123; } } int main() { try { b(); } catch(...) {} } $ cat…
最近、integer overflowが根本原因のセキュリティホールを良く見かけます。普通のバッファオーバーフローについては世間の理解が進んで、最近では char buf[1024] = {0}; char* dst = buf; while(*src != '=') *dst++ = *src++; // 1023文字目までに = が存…
大和さん@RedHat Binareal - バイナリファイルの構造と解釈 tcpdumpは構造改革によってetherealになった objdumpを改革するとbinarealになる! 野首さん いけないお化粧magic(5) swfによるプレゼンテーション! 「タイトルの由来がわかる人はお年です」 magi…
縁あってカンファレンスを見に行くことができました。印象に残ったキーワード等を並べてみます。 高林さん Binary 2.0 時代の到来 冒頭から会場中が笑いの渦。プレゼンが(やっぱり)すごく面白い。 「2.0がついていればなんでもよかった」 「signalを深追い…