Bin

TCC Parser Ruby module

Tiny C Compiler のパーサを用いてヘッダをパースし、 Ruby/DL 等で使用できる関数だの構造体だのマクロだのの一覧を吐き出すモジュールです。http://shinh.skr.jp/binary/tccparser.tgzスクリプト言語から C とかの関数をシームレスに触る、っていうのはだ…

malloc を書く

これまでのあらすじ: GC を忘れて、スマートポインタも忘れられるソフトウェアについてぼんやり考えていたわけです。小規模のソフトならメモリは確保しっぱなしで良い、 Apache なんかなら1アクセスごとにメモリプール作って終わったら全部まとめて解放すれ…

Dynamic Test Runner 0.0.3

http://shinh.skr.jp/binary/dtr.htmlまた地道にいじり始めようと思ったため、とりあえず現状わかっていたバグを取り除いたバージョンです。また、配布サイトを用意しました。久々にいじったのでまだヘンなところが残っているかもしれません。 sayさんに指摘…

linker script

なんとなくリンカスクリプト回りを眺めた。いじったら面白そうなのは ENTRY と GROUP かなぁ… ENTRY はまぁ僕は glibc には頼りません!って人、っていうか環境くらいか。GROUP はなんか mingw32 でいつも SDL とかのリンクに苦労しまくってる時の解決になる…

C++ でポージング

http://www.rubyist.net/~matz/20051027.html#p02を見てそりゃ Ruby の open class の方が強力だろう!って思った人は私だけじゃないと思うのですが、それはともかく C++ でポージングしましょう。http://d.hatena.ne.jp/shinichiro_h/20060112#1137000855と…

C で curry 化 @lightning

さて上記をポータブルに。 GNU lightning の出番。http://www.gnu.org/software/lightning/lightning.html下記コードは i386-linux と ppc-macosx と sparc-solaris で動きました。 #include <stdio.h> #include "lightning.h" typedef int (*pifi)(int); static jit_</stdio.h>…

C で curry 化 @x86

http://nicosia.is.s.u-tokyo.ac.jp/pub/essay/hagiya/h/curryを Sun から x86 に。 C言語は便利で楽しいなあ、と思わざる得ないのである。 に激しく同意なのです。 #include <stdio.h> #include <stdlib.h> #include <sys/mman.h> int (*curry(int (*F)(), int A))() { char *code = (char*</sys/mman.h></stdlib.h></stdio.h>…

Bin ってタグを

つけて回りました。 binary って言っても別にバイナリでもなんでもないようなものも多いわけですが、まぁなんとなく native binary 作る言語のランタイムをいじるようなものは binary 、って感じで。

テクマクマヤコン @C++

実行時に所属クラスを変える話の続き。前回は Objective-C だったけど今度は C++ でもやっておく。http://d.hatena.ne.jp/shinichiro_h/20051231#1135964893結局仮想関数テーブルを変えるだけなのでやることは一緒。 void become(const Base& o) { *(void**)…

zero-cost singleton

考えてみるまに使ってみた方が速かろーと思って作ってみた。 singleton template は、まぁラクだけど Singleton::instance() を呼ぶたびに if が呼ばれるのがなんか、なんか…と貧乏症プログラマとしては思う、ということで一度目の呼出し時に自己書き換えし…

テクマクマヤコン @objc

しつこくオブジェクトシステムの話。http://d.hatena.ne.jp/shinichiro_h/20051213#1134403952の続きなんだけど、とりあえずポージングは全然違った。state遷移の話。例えば敵オブジェクトが弾に当たって適当な爆発エフェクトになる、っていうヤツを実装する…

dumper-0.2.0

もう少し完成度を高めました。http://shinh.skr.jp/binary/dumper.tgz前回とかは以下を参照。http://d.hatena.ne.jp/shinichiro_h/20051225#1135499616出力が色々と綺麗になったり細かい使い勝手を良くしたりしてあります。たぶん実用できるので今度使ってみ…

dumper-0.1.1

http://shinh.skr.jp/binary/dumper.tgzhttp://shinh.skr.jp/binary/libdwarf.spechttp://shinh.skr.jp/binary/libdwarf-20051201-1.i386.rpmid:sa-y さんにコメントで指摘いただいたのでとりあえずそこだけ修正。ありがとうございました。http://d.hatena.n…

dumper-0.1.0

http://shinh.skr.jp/binary/dumper.tgzC で使える Kernel#p 作りました。マジメにやってみると結構面倒だったです。http://d.hatena.ne.jp/shinichiro_h/20051207#1133881740の続きです。libdwarf が必要なので、なんとなく適当な rpm パッケージも作りまし…

COPYING 多すぎ問題と libGPL

> locate COPYING | wc 987 993 43240これは大変なことです。要するにディストリビューションがライセンスをドキュメントとしてくっつけるから、同じ GPL の COPYING が大量発生しているわけ。http://shinh.skr.jp/binary/libgpl.tgzそこで libGPL です。 li…

backtrace on Win32

http://shinh.skr.jp/d/backtrace.zipWin32 上での D でハンドルされてない例外で main を脱出する際に、例外が起きた時のバックトレースを表示するものです。行情報とファイル情報の取得では id:h_sakurai さんの仕事を激しく流用させてもらっています。htt…

omfutils

http://shinh.skr.jp/binary/omfutils.tgzD でプログラム書いてるとお付きあいすることになる OMF を扱うユーティリティ。とりあえず OMF レコードをバラして適当に表示する omfdump 、フィーリングでシンボルを取ってきて表示する omfnm 、 .lib ファイルを…

dumper

http://shinh.skr.jp/binary/dumper.tgzシリアライズっていうか構造体の中身を動的に取得できん、っていう話があったんですが、環境依存して良ければ -g オプションと DWARF2 でできるだろう、ということでとりあえず gdb がやってくれるみたいな変数の中身…

dtrですが

とりあえず ->size が binutils-2.14 には無いとのことなので修正パッチだけ。sayさんに報告いただきました。 --- dtr.cc (revision 990) +++ dtr.cc (working copy) @@ -427,7 +427,7 @@ void DtrFile::load_ctor_section(asection* sec) { if (!sec) retur…

Dynamic Test Runner 0.0.2

http://shinh.skr.jp/binary/dtr-0.0.2.tar.gz.o ファイルをダイナミックロードして中のテストを駆動するものです。http://d.hatena.ne.jp/shinichiro_h/20051123#1132700485の続き。ローダっぽいもの書くのは案外楽しいのでしばらく地道になんかしようと思…

Dynamic Test Runner 0.0.1

http://shinh.skr.jp/binary/dtr-0.0.1.tar.gzBinary 2.0 時代のテストツールを書きました。 suite.addTest(test1); suite.addTest(test2); suite.addTest(test2); suite.addTest(test4);こういうミス、よくやりますよね。 DTR によって煩雑なテスト登録作業…

mydl

.o をロードするダイナミックローダを書いてみました。http://shinh.skr.jp/koneta/mydl.tgz int add(int x, int y) { return x+y; }みたいなコードを gcc -c add.c とコンパイルしておき、 #include <stdio.h> #include "mydl.h" int main() { void* handle = mydlop</stdio.h>…

Objective-C

また ObjC いいなと思えてきた。 Binary 2.0 は死んだらしいし。というかまた C に飽きてきた。 機能つぎはぎでゲームオブジェクトを作りたいことはよくあるので、 Category とか Protocol とかがゲームとかに向いてそう。(プレイヤーの攻撃を受ける、丸い形…

実行時継承関係抽出

http://shinh.skr.jp/koneta/reflection_cpp.tar.gz以下のようなクラス階層から、 struct C { virtual void f() {} }; struct D : public C { }; struct E { }; struct F : public C, public E{ };以下のような情報を実行時に吐けるようになりました。 C <= …

reflection.cc

http://shinh.skr.jp/koneta/reflection_cpp.tar.gz以下のように、 Test クラス内の test ではじまっているメソッドをイテレートして呼び出せます。 #include "reflection.h" #include <iostream> #include <cstring> using namespace std; class Test { void test_func1(); voi</cstring></iostream>…

reflection.d 2.0

http://shinh.skr.jp/d/reflection.tar.bz2reflection.d を最近得た知識から書きなおして、引数に nm の出力や map ファイルを取る必要をなくしました。 Win32 では Win32API を用いて、その他環境では libbfd を用いて実行ファイル自身からシンボルテーブル…

main 以前

crtbegin と crtend を見てみる。 crt* ってのは gcc が勝手にリンク時に追加する小さな static link library 。

Ruby/Cpp

http://shinh.skr.jp/koneta/rubycpp.tgzブリッジを書かずに Ruby から C++ を触る実験。やってることとしては、 .so を dlopen して dlinfo して内容を libbfd で読んで、 libiberty でデマングルして保持、んで Ruby から new とか method_missing が呼ば…

継承とかしてみる

面白いかと思ったけどツマらなかった。そもそもスクリプト言語でコンパイル言語のクラスを継承してそれをまたコンパイル言語側で使いたいこととかあるはずない。そしてコンパイラの情報使わんとロクなことできない。ていうかまだ _ZN1C3addEii とか残ってる…

しー言語たぶん最後

http://shinh.skr.jp/koneta/#shelang思いの他がんばった。対応 OS が Linux, FreeBSD, Solaris, NetBSD, MacOSX, Windows 。 Winバイナリ入り。 ./she.exe test.she や ./she.exe test_sdl.exe などと。たぶんいずれまとめるけど、前回 (http://d.hatena.ne…

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h