programing

大きなアライメントのメモリブロックを確保する方法

大きなアライメント(数百kbyte, 数Mbyteレベル)のブロックを確保する方法に困りました。 malloc()で大きめに確保して、無駄な部分を切り詰めるやり方 => 「無駄な部分」のサイズが大きすぎる。 posix_memalign() => これ確保したメモリはfree()できるので、…

SEQUITUR

だいぶ放置していたけれども、ふと思い立ってSEQUITURを実装しました。SEQUITURアルゴリズムというのは文字列などを文法構造に変換するアルゴリズムで、データの圧縮などに利用されたりするものです。->コード SEQUITURについてはhttp://sequitur.info/がと…

INT 3命令

いまどきのアセンブラプログラミング―Windowsプログラム解析・開発の独習 をなにげなく読んでいて見つけた命令。 INT 3という特殊な割り込み命令をプログラム中に埋め込むことでブレイクポイントをつくれるらしい。 これは(0xcc)という1バイト命令で通常のソ…

vimのシンタックス/インデント自作

大学の授業でLiLFeSという非常にマニアックな言語(ほとんどProlog)をやるのですが、当然シンタックスもインデント規則も定義されていません。 prolog.vimをそのまま使ってもいいのだけれど、せっかくなので自作してみました。 http://mad-projects.iobb.net/…

jpeglibの勉強

Adobe GILでもjpeglibが使われていた。自分もこれを使おうと思うので勉強。テストコード // jpeg_test.cpp #include <stdio.h> #include <stdlib.h> #include <jpeglib.h> int main(int argc, char **argv) { struct jpeg_decompress_struct cinfo1; struct jpeg_error_mgr jerr; cinfo1.er</jpeglib.h></stdlib.h></stdio.h>…

exploit(続2)

id:MaD:20070209の続きです。 自作のバグありプログラムにexploitを仕掛けるということをしていたわけですが、アセンブリを見れば全て解決でした。crackmeのmain関数の最初と最後で行われている処理のアセンブリを以下に載せます。 ここでは次のような処理が…

exploitの勉強(続)

id:MaD:20070206の続き。なんか上手くいかなくてexploit完成してないんだけれど、やってみた事を書きます。バッファオーバーフローでmainからの戻りアドレスを書き換えることは問題なしで、問題は書き換えるアドレスの値の特定。 書き換えたアドレスがバッフ…

exploitの勉強

久しぶりにPuzzles for Hackers:スクリプトキディから大人のハッカーへ (IT Architects' Archive 知の連環)の続きを読んだ。1.4コーディング問題、1.5安全なプログラミングまで。 1.5にexploitについての問題があったのだけれど、バッファオーバーフローを利…

フィボナッチ数列

レポートとは関係なく、対数時間でフィボナッチ数列を計算するプログラムをPPCアセンブリで書いてみた。 PPCアセンブリがあまりにも読みにくくて、ちょっと好きになれなかったのだけどまあまあ書けるようになった。 .text .align 2 .globl _fib_fast _fib_fa…

最短経路問題(ダイクストラのアルゴリズム)

大学の課題が出来上がった。 URL: http://mad-projects.iobb.net/shortest_path.html ソース: http://mad-projects.iobb.net/websvn/listing.php?repname=Repository+of+mad&path=%2Fmisc%2Fgraph%2Fshortest_path%2F&rev=0&sc=0地図データはJSONで書いてみ…

boid

図解 OpenGLによる3次元CGアニメーション作者: 橋本洋志,小林裕之出版社/メーカー: オーム社発売日: 2005/02/01メディア: 単行本 クリック: 19回この商品を含むブログ (9件) を見るOpenGLについてちゃんと勉強してみようと思って本を探していたら、例題とし…

Google Maps API

大学の課題で、経路探索のプログラムを書かなければいけないのだけど、出発地・目的地の指定、経路の表示にGoogle Maps API を使おうと思った。 テスト:http://mad-projects.iobb.net/map_test.html これすごく簡単に使えるなぁ。

多倍長整数演算:繰り下がり

とりあえずレポートできたしもうこのネタは終わりにしよう。早く自分の開発に戻らねば。このところバイトと大学に追われてしまっている..orz RubyのBignumを読んでてなるほどと思ったこと。(たぶん他のどの実装も同じはず) 多倍長整数の減算をする場合は繰り…

多倍長整数演算:基数変換(続)

大体Knuthの内容が理解できた。本を返さなきゃならないのでメモっておこう。 とりあえず分かり易いように二進数十進数の変換に限定して書いとく.(他の基数でもほとんど同じ) まず進数に変換 普通の基数変換では、多倍長整数uがあった場合これを次々と10で割…

多倍長整数演算:基数変換

RubyのBignum実装を参考に実装してみた。Rubyってソースが綺麗な事で有名だけどBignumのソースは正直...うーむ読みにくい。 まぁ、速度が重要な数値回りのライブラリだし一つの変数を使いまわしたりするのは仕方ないのかもしれない。 整数環なので加算・減算…

追記:多倍長整数演算

多倍長演算の場合キャリーを考える必要があって、一桁mビットだと乗算のキャリーが最大mビットだから、普通はunsigned short型(2バイト)配列で整数値を表し計算途中はunsigned int(4バイト)型配列を使えば良い。 んで、もし基数を負数にするとしたら一桁mビ…

多倍長整数演算

レポートの2つ目の課題。 多倍長演算は結局ただの筆算なので実装は楽だろう。 でも、それじゃ自分の勉強にならないのでネタを探していた。*1 多倍長演算の実装には ビット列を符号なし整数として保持。符号情報を別に扱う。 ビット列に符号情報まで埋め込む…

アルゴリズムとデータ構造レポート

初レポート。内容は C言語でリスト構造を作れ C言語で整数環を作れ というもの。 リスト リストは以前作った事があるので、よく分かる。双方向リンクリストを実装した。 でも、来週からはSchemeを授業でやるらしいけど、LISPのリスト構造にしてみた方が良い…

ライフゲームちょっと改良

Moore近傍の座標値をテーブル検索ではなく、毎回計算するように変更。 これで約2倍の高速化に成功しました。(ソース)配列のインデックス計算のコストの大きさを改めて実感。 テーブルを作ってイテレータで検索したらもっと早くなるはず。現在約80万個のセル…

ライフゲーム

ライフゲームの実装をしてみました。(ソース) 大急ぎで作ったので正直ソースはめちゃめちゃ汚いですorz これはまだ、プロトタイプで初期配置はランダム配置しかないのですが、それなりに高速なのが作れました。*1 ただ眺めてても面白いですね〜。 1974年のTi…