mozdev.org に、The Single UNIX Specification, Version 3*1 を検索するためのプラグインがありました。Windowsはもちろん、FC5(x86_64)のfirefoxでも無事動きました。 (デフォルトで)firefoxのウィンドウの右上にある検索窓からSUSv3全体を検索できるって…
GOT overwrite? "GOT overwrite" という、(ここでは特にLinuxの)プログラムに対する攻撃方法があります。攻撃が成功すると、そのプロセスの権限での任意コード実行等、深刻な被害を受けます。最近のGNU ld(リンカ)のオプションを用いると、この攻撃から身を…
書くのが2日遅れになってしまいましたが、ふつケル写経会、第4回目も参加。3章の練習問題から4章の終わりまで。RubyCocoaの藤本さんとペアで写本しました(ありがとうございました、理解が進みました)。この進捗具合だと、結構早い時期に読み終わってしまう…
IPAからテクニカルエンジニア(情報セキュリティ)の合格証書が送られてきました。Webで成績を調べたら、745-625-715点とのこと。午後Iがギリギリだけど(想定外...)、他は上位5%以内でした。2001年の情報セキュリティアドミニストレータ試験も新設後初回試験…
(こちらの記事の続き)
(こちらの記事の続き、おまけです) 「分岐しないソート」の、VC++向けのコードをGCC+Linux向けに修正してみました。
分岐しない4要素のソート、GCC/Linux/x86,x86_64,arm版 こちらに、「分岐しないソート」という記事があります。短いので読んでいただくほうがよいと思いますが、文章&アセンブリ言語のコードの内容を要約すると、 4要素のソートは、頑張れば5回の比較と5回…
小ネタ2。 GCCで複数行からなるインラインアセンブラを書くとき、 __asm__ ("movl %0,r9\n\t" "movl %1,r10\n\t" "call _foo" :: "g" (from), "g" (to) : "r9", "r10");のように \n\t 区切りで書くひとと、\n\t のかわりにセミコロン区切りで書く*1ひとがい…
昨日は はてな を見学させていただき、今日はふつける写経会に参加。両方とも刺激的でした。id:mizuno_takaaki さん、あまの id:beakmark さん、どうもありがとうございました。
gccの__attribute__((cleanup(fn))) が便利すぎる件について。 C++でコードを書くときは、RAIIとか呼ばれているイディオムを使えば、ご存じの通り、ロックしたmutexを手動で開放する必要もないですし、newしたオブジェクトを手動でdeleteする必要もないです…
たまには何か書きます。C/C++のマルチスレッドなプログラムのユニットテストでバグを効率的に見つけるためのライブラリ?の作成について。 IBM dWのConTest はてなブックマークを眺めていたら、「ConTestを使用したマルチスレッド・ユニットのテスト - 並列テ…
さて、インフルエンザで寝込んでいる最中ですがここぞとばかりに更新。 以前書いたGCCの-ftrapvをそろそろ実戦投入するかと思ったんですが、3つほど注意点を見つけたのでメモ。 問題1: 3.3.x以前でちゃんとうごかない GCC 3.3.x 以前のlibgccの実装にはバグ…
man 3p pthread_mutex_lock とか、man 3p sigwait とか、まぁなんでもいいんですけどセクション3Pを指定してmanを閲覧すると、SUS(v3? v2?)の関数の仕様をほぼそのまま原文で参照することができます。たとえばpthread_mutex_lockならこれがそのまま表示され…
「シグナルハンドラの中でできることは非常に限られているんですよ」というお話を1年半くらい前に書きましたが、この話には続きがあって、ある特定の条件下ではこの制限を緩和することができます。今回はその方法についての解説です。sigwait(3)という関数を…
前回、GCCの-ftrapvを使用すると、符号あり整数同士の演算におけるオーバーフローを検出し、オーバーフロー時にabort()が呼ばれることを示しました。しかし、「abortじゃ意味ないんだよねー、C++の例外をthrowするとか、せめてbacktraceを表示するとかしてく…
という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を深追い…
500,000,000回まわしてこの程度の処理時間ですから、どれも高速だと思う。差なんてないようなものではなかろうか。むしろ、Singleton(=グローバル変数)なんて殆ど使わなくて済むような設計を心がけるべきで、完全同期バージョンのSingletonを使ってパフォー…
(1) SynchronizedSingleton: 完全同期型Singleton 特に説明は不要でしょう。non-PODでstaticなオブジェクトを使用するのは好きじゃありませんが(メンバ変数m)、今回は目を瞑ります。 template<typename T> class SynchronizedSingleton : private boost::noncopyable { p</typename>…
結果は次の通り。 $ ./a.out DCLSingleton: 0.27 [s] GccTSDSingleton: 0.62 [s] OnceSingleton: 17.08 [s] TSDSingleton: 22.83 [s] SynchronizedSingleton: 52.95 [s] 手法処理時間(1/Sync比)処理時間(DCL比) DCLSingleton196.11.0 GccTSDSingleton85.42.3…