programming

core dumpの解析手法

について書くはずだったんだけど何を書くのかわすれた!とりあえず基礎的なことについてまとめておく。 バイナリはunstrippedなものを使用 できれば-gオプションこみでコンパイルしておく。 coredumpを吐くようにbashを設定 ulimit組み込みコマンドを使用 ul…

sizeof(long)とsha1.c

public domainなSHA-1実装で知られるsha1.cですが、x86_64で使うとsizeof(long)==4を前提に作られているため、メモリ破壊を引き起こします。unsigned longをuint32_tに置換するとうまくいきました。http://nyaxtstep.com/trac/nxfs/browser/sha1/sha1.c?rev=…

続・「C++のコンストラクタで例外を投げてはいけない」は迷信

d:id:nyaxt:20080322の続きid:ototoiさんにいろいろ教えてもらったのでメモ。

「C++のコンストラクタで例外を投げてはいけない」は迷信

via. http://www.kmonos.net/wlog/83.html#_1255080321この件に関してはずっと誤解していたので、調べてみた。 昨日の#lowhacksで騒いでいた件のまとめ。「C-torで例外を投げてはいけない」というのは、確かに迷信のようだ。

小ネタ:friend classの一括管理

元ネタ:Boost::Serializationの class Member { // ここで一括管理できる friend class Hoge; friend class Hage; friend class Fuga; private: template<typename T> static void func(T& t) { t.func(); } }; class Himitu { friend class Member; private: void func</typename>…

吉里吉里3のレンダリングエンジン設計

http://kikyou.info/diary/?200712#i9_1気になる。結構nytrと近いものになる予感。DAGによる解決とかKilaueaのSPOTシステムにかなり近い感じ。ソースでてきたら見る。

FThreadバグ

スレッドキャンセル機構にバグがあった。修正。実行中のスレッドをcancel()するのは問題ないのだが、既に終了しているスレッドのFThreadクラスインスタンスをcancel()すると既にfreeされたメモリを参照してしまう。原因はスレッドキャンセルのフラグのdelete…

Visual C++: "HEAP: Free Heap block modified after it was freed"

_heapchk()のassertを怪しそうな場所に入れまくるといいらしい。今回はそれでは発見できず、適当にデバッガで遊んでいたらそれらしいアドレスがポインタに入っているのを偶然発見できたので助かった。デバッグ用メモリ管理ラッパやLinux使えるならValgrindを…

sevilmdwmを本家のアップデートに追随

させました。あんまりテストしていないので、速度気にしない方は一つ前のリビジョンのがいいかも。shinichiro_h様、アップロードの件対応ありがとうございました。

sevilwm mod

さて公開すっか、と思ったらアップデートされてるー。取り込んだら公開します。けっこうがしがしコード入れ替えちゃったのでmodとして独立に公開することにします。適当にマルチディスプレイ対応にしたせいで重くなっているのも事実なので。ご迷惑でしたらパ…

LiAR : LiAR isn't a raytracer

rendering algorithm forumに書き込もうとしたら繋がらなかったので…http://liar.bramz.org/非常にアグレッシブな?ヨーロッパの学生さんによるレンダラ。レンダリングアルゴリズム実装部はすべてPython拡張として作られていて、Pythonからレンダラ部の動的…

libcoroutine

これは恥ずかしい。既に公式であったのか。http://www.dekorte.com/projects/opensource/libCoroutine/自前バージョンから移行せねば。追記: 移行するかと思ったけれど、中身をよく見るとbasekitという謎のCライブラリに依存したまま、libcoroutineディレク…

あとで考察:container引数

duck typing: func(T& container) STL型: iterator begin, end C風: T* ary, unsigned int ncount

C++ tips集

お勧めなのではてブだけでなくこっちにも載せとくhttp://www.gotw.ca/gotw/index.htm

あとで検証する:iterator使用はloop unrollingを妨げるか

boost::arrayつかっててちょっと気になった。

auto_ptr_array、boost::scoped_ptr

動的配列を管理しようとする際、auto_ptrは単体deleteを呼んでしまうのでいろいろと都合が悪い。適当にぐぐってみるとstd::vectorを使えという意見が目立つ。しかしこれではC風の関数(const T* ary, unsigned int nCount)とか呼び出すときに困ってしまう。bo…

ローカルアプリでの脆弱性

不正ファイル読み込みによって任意のコードが走るとか。皆さん対策してますか?今回のLhacaであったようなタイプの脆弱性を見つけるには、Fuzz Test(IBMによる解説)が有効のようです。インターネットを介した通信を行うようなソフトウェアだと流石にセキュリ…

非virtual destructor

http://d.hatena.ne.jp/nyaxt/20070430#1177938827これってD-torをprotectedにすれば問題ないのでは?あとで試す。

allocaの謎解決

allocaってローカル変数の配置をどうするのか謎に思っていた。

MAXScriptを軽く触ってみた印象

3ds max用スクリプティング言語MAXScriptを軽く触ってみた印象。構文が今までに読んだことのあるどの言語とも違い独特 ブロックが{}ではなく() メソッド引数区切りにコンマはいらない。(Haskellライク?) 関数定義がfn {関数名} = () return省略するとブロ…

オレオレ・コーディング規約 : コメント方針2

処理ブロックごとに何をしているのか概要を入れる。一行ごとにコメントは入れるようなことをせず、わかりやすいコーディングを心がける。1行に対するコメントが必要な状況に至った場合、わかりやすくなるようにコード自体を書き換える、又は関数のインターフ…

オレオレ・コーディング規約 : コメント方針

publicメソッドのコメントは全部かく。JavaDoc形式。コンストラクタ、デストラクタにコメントをつけるべきか迷ったが、param説明を促すためにplace holderとしておいておく。メソッド定義が1画面に入りきらなくなったら分割する。分割が難しい場合はインデン…

オレオレ・コーディング規約 : 変数名

改善の余地アリ。基本的にハンガリアン記法+lowerCamelCaseを使います。

オレオレ・コーディング規約 : enum

最後の要素の末尾にもコンマ(,)を置く。diff最小化の為。 // example enum { //! description asdf HEADER_ITEM1, //! description bsdf HEADER_ITEM2, };

オレオレ・コーディング規約 : virtual キーワード

コーディングスタイルを固定していく試み。 class Interface { virtual void asdf() = 0; // pure virtual なので virtual必須 virtual void bsdf() = 0; }; class ImplBase : public Interface { virtual void asdf(); // virtualキーワードはC++規約的には…

デストラクタ非virtual最適化でGCCが怒る

派生クラスのデストラクタはvirtual指定して仮想関数にしてやらないと、上位クラスポインタからdeleteしたときに正しくデストラクタが呼ばれません。 ただ、上位クラス、下位クラス共にPlain Old Objectよろしくデストラクタの処理が全く必要ない場合があり…

strncpy does NOT guarantee to NULL terminate itself.

strlcpyとか使おう。標準じゃないから定義されていない場合の独自実装も用意しておくこと

続・イテレータループ内でのerase

d:id:nyaxt:20070326の続き。eraseの戻り値がない場合*1は、i++でも問題ないっぽい?要検証。 *1:Mac OSXのstd::map::eraseとか

GCC:静的ducktypingもどきでテンプレートメンバ関数を利用

GCCだとうまく解析してくれないので、明示的にtemplateキーワードを指定してやる。http://ml.tietew.jp/cppll/cppll/thread_articles/8828

Fiber

他スレッドで作られたFiberにはSwitchToFiberできない模様。fectiではWorkerProcのインスタンスを複数もたせれば解決できるな。