SUSv3検索プラグイン

mozdev.org に、The Single UNIX Specification, Version 3*1 を検索するためのプラグインがありました。Windowsはもちろん、FC5(x86_64)のfirefoxでも無事動きました。 (デフォルトで)firefoxのウィンドウの右上にある検索窓からSUSv3全体を検索できるって…

ld -z relro で GOT overwrite attack から身を守る

GCC

GOT overwrite? "GOT overwrite" という、(ここでは特にLinuxの)プログラムに対する攻撃方法があります。攻撃が成功すると、そのプロセスの権限での任意コード実行等、深刻な被害を受けます。最近のGNU ld(リンカ)のオプションを用いると、この攻撃から身を…

ふつケル

書くのが2日遅れになってしまいましたが、ふつケル写経会、第4回目も参加。3章の練習問題から4章の終わりまで。RubyCocoaの藤本さんとペアで写本しました(ありがとうございました、理解が進みました)。この進捗具合だと、結構早い時期に読み終わってしまう…

IPA

IPAからテクニカルエンジニア(情報セキュリティ)の合格証書が送られてきました。Webで成績を調べたら、745-625-715点とのこと。午後Iがギリギリだけど(想定外...)、他は上位5%以内でした。2001年の情報セキュリティアドミニストレータ試験も新設後初回試験…

N要素の分岐しない odd-even mergesort (GCC+Linux/x86_64用)

GCC

(こちらの記事の続き)

4要素の分岐しないソート (GCC用)

GCC

(こちらの記事の続き、おまけです) 「分岐しないソート」の、VC++向けのコードをGCC+Linux向けに修正してみました。

分岐しないソート (のジェネレータ)

GCC

分岐しない4要素のソート、GCC/Linux/x86,x86_64,arm版 こちらに、「分岐しないソート」という記事があります。短いので読んでいただくほうがよいと思いますが、文章&アセンブリ言語のコードの内容を要約すると、 4要素のソートは、頑張れば5回の比較と5回…

インラインアセンブラと \n\t

GCC

小ネタ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 さん、どうもありがとうございました。

RAIIもどき in C

GCC

gccの__attribute__((cleanup(fn))) が便利すぎる件について。 C++でコードを書くときは、RAIIとか呼ばれているイディオムを使えば、ご存じの通り、ロックしたmutexを手動で開放する必要もないですし、newしたオブジェクトを手動でdeleteする必要もないです…

Java の ConTest っぽいものを、glibcの新機能(LD_AUDIT)を使って Linux + C/C++ で実現してみる

たまには何か書きます。C/C++のマルチスレッドなプログラムのユニットテストでバグを効率的に見つけるためのライブラリ?の作成について。 IBM dWのConTest はてなブックマークを眺めていたら、「ConTestを使用したマルチスレッド・ユニットのテスト - 並列テ…

GCCの-ftrapv (3)

さて、インフルエンザで寝込んでいる最中ですがここぞとばかりに更新。 以前書いたGCCの-ftrapvをそろそろ実戦投入するかと思ったんですが、3つほど注意点を見つけたのでメモ。 問題1: 3.3.x以前でちゃんとうごかない GCC 3.3.x 以前のlibgccの実装にはバグ…

manのセクション3P

man 3p pthread_mutex_lock とか、man 3p sigwait とか、まぁなんでもいいんですけどセクション3Pを指定してmanを閲覧すると、SUS(v3? v2?)の関数の仕様をほぼそのまま原文で参照することができます。たとえばpthread_mutex_lockならこれがそのまま表示され…

シグナルハンドラを使わないでシグナルをハンドルする

「シグナルハンドラの中でできることは非常に限られているんですよ」というお話を1年半くらい前に書きましたが、この話には続きがあって、ある特定の条件下ではこの制限を緩和することができます。今回はその方法についての解説です。sigwait(3)という関数を…

GCCの-ftrapv (2)

前回、GCCの-ftrapvを使用すると、符号あり整数同士の演算におけるオーバーフローを検出し、オーバーフロー時にabort()が呼ばれることを示しました。しかし、「abortじゃ意味ないんだよねー、C++の例外をthrowするとか、せめてbacktraceを表示するとかしてく…

「C++と組み込み環境」

C++

というblogを見つけました。こちらです。組み込みと銘打っていますが、C開発者向けにC++のpitfallを解説した記事として大変に有益と思います。C++規格の章番号を出して解説してくれているのは大変goodですね。 個人的には9月の記事、8月の記事がツボ。

signed intでの配列アクセスはマジヤバイ(こともある)

C++

次の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として負数を渡すと面白い(というか恐…

integer overflow 流行りな昨今 (3)

現実的な解決策 in C++ でも、クイズに書いたようなオーバーフローって、なかなか防ぎきれないんですよね。 技術力を向上する がんばってレビューする 静的なコード検査ツールを使う(QAC++とか、PolySpaceとか、これとか) などが王道かとは思いますが、学習…

integer overflow 流行りな昨今 (2)

前回(クイズ)の続きです。自分で解いてみた結果を貼っておきます。(8)とか(9)はそれなりに面白いかと。

GCC-4.1.0 and ProPolice/SH

えとーさんに教えてもらって参加した SEA & FSIJ 合同フォーラム2005年12月 「GCC行く年来る年」で伺ったところによると、GCCの4.1でIBM東京基礎研のProPoliceがマージされて、しかもx86だけでなく、x86_64, ppc, sparc, s390, そしてshがサポートされるそう…

operator newの隠れた整数オーバーフローとVisualStudio 2005のVC++

C++

void vuln(std::size_t nelem) { int* p = new int[nelem]; std::memset(p, 12345, nelem); }上記の関数には整数オーバーフローに起因するヒープベースバッファオーバーフローの脆弱性があるんですが、どこがまずいかわかりますか? まずいのはnewしている部…

GCCの-ftrapv

gcc -ftrapv 最近のGCC(>=3.x)には-ftrapvというオプションがあって、これを有効にすると「符号あり整数同士の加算・減算・乗算でオーバーフロー/アンダーフローが発生したとき、プロセスをabort()」してくれます。例えば、INT_MAX + 1 とか INT_MIN - 1 と…

g++ の -fthreadsafe-statics ってオプション知ってます?

C++

古来より、関数スコープの静的なオブジェクトを作るのは危険 void foo() { static CBar bar; // こんなの とされています。foo()が初めて呼ばれたタイミングでbarのコンストラクタが走るわけですが(C++規格でそう決まっている)、foo()の初回呼び出しが2つの…

C++例外がCのコード中を通過するとクラッシュする件

C++

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 流行りな昨今

最近、integer overflowが根本原因のセキュリティホールを良く見かけます。普通のバッファオーバーフローについては世間の理解が進んで、最近では char buf[1024] = {0}; char* dst = buf; while(*src != '=') *dst++ = *src++; // 1023文字目までに = が存…

binary 2.0 (ライトニングトークス)

大和さん@RedHat Binareal - バイナリファイルの構造と解釈 tcpdumpは構造改革によってetherealになった objdumpを改革するとbinarealになる! 野首さん いけないお化粧magic(5) swfによるプレゼンテーション! 「タイトルの由来がわかる人はお年です」 magi…

binary 2.0 カンファレンス参加

縁あってカンファレンスを見に行くことができました。印象に残ったキーワード等を並べてみます。 高林さん Binary 2.0 時代の到来 冒頭から会場中が笑いの渦。プレゼンが(やっぱり)すごく面白い。 「2.0がついていればなんでもよかった」 「signalを深追い…

Singleton速度比較 (4) 感想

C++

500,000,000回まわしてこの程度の処理時間ですから、どれも高速だと思う。差なんてないようなものではなかろうか。むしろ、Singleton(=グローバル変数)なんて殆ど使わなくて済むような設計を心がけるべきで、完全同期バージョンのSingletonを使ってパフォー…

Singleton速度比較 (3) ソースコード

C++

(1) SynchronizedSingleton: 完全同期型Singleton 特に説明は不要でしょう。non-PODでstaticなオブジェクトを使用するのは好きじゃありませんが(メンバ変数m)、今回は目を瞑ります。 template<typename T> class SynchronizedSingleton : private boost::noncopyable { p</typename>…

Singleton速度比較 (2) 結果

C++

結果は次の通り。 $ ./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…