2005-01-01から1年間の記事一覧

Objective-C

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

curry.rb

ohaiさんとこより。http://www.kmc.gr.jp/~ohai/diary/?date=20051120#p01すばらしい。好きなところの変数を curry 化したかったので、 Boost::bind チックに。 class Symbol def bind(*p1) proc do |*p2| obj, *args = p1.map do |a| (a == :_) ? p2.shift …

実行時継承関係抽出

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>…

Binary 2.0 カンファレンス

http://namazu.org/~satoru/blog/archives/000078.htmlなんかひょんなことから喋ることになりました。ネタをマジで実現させるのは偉大だなぁ…と再確認。他の話し手とか、手元に来てる登録受付の面々を見るに、私なんかが喋ることあるのかと思いました。

ワンダと巨像

とても面白かった。ほとんど一日でクリアするとか愚かだと思った。エンディングの後のセーブデータによると14時間ほどらしい。世界の雰囲気がいいとか、グラフィック綺麗とかサウンド綺麗とかはおいておいて、システム的に良いところは、やたらでかい敵を色…

reflection.d 2.0

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

おまけ

最適化とキーワードに応じたソースコード生成を。http://shinh.skr.jp/koneta/fngcg.cgi?key=SDLっぽいコードをソース。http://shinh.skr.jp/koneta/fngcg.rbhttp://shinh.skr.jp/koneta/ngcg_fimp.rb次世代のスーパープログラマは、 Google の I'm feeling …

超次世代IDE

http://shinh.skr.jp/koneta/ngcg.cgi上記妄想から次世代のIDEをサクっと作ってみました。なんとソースコードが全て自動生成されます。以下ソース。http://shinh.skr.jp/koneta/ngcg.rbhttp://shinh.skr.jp/koneta/ngcg_import.rb以下に依存。 Ruby/BDB (htt…

超推論言語妄想

http://www.kmonos.net/wlog/55.php#_1446051108面白いなぁ…こういうのがメインストリームになるってのはちょっと予測しずらくもあるんですが。もう少しルールが明確でないと、この場合は推論してくれるんだっけ…とか思って結局メソッド名全部書いちゃいそう…

extern void* __dso_handle;と宣言してこの __dso_handle の NULL チェックを行うことによって自分が dynamic link されているか static link されているかを知ることができる。ちなみに __dso_handle の中身はただの自分自身を差すポインタ。crt(begin|end)…

main 後も ctor が dtor になるだけでほとんど同じ。なんか気になってた __JCR_LIST__ と __JCR_END__ は Java Class Registrer とかだそうで、 _Jv_RegisterClasses とかと関係あるんだろうたぶん。 i@u gcc/i386-redhat-linux/4.0.1> nm -o *.o G global c…

objcopy --rename-section .ctors=.ctors. begin.oとかすると、たぶん最初に実行される .ctors セクションになる。もしくはリンク時に最後に書くオブジェクトファイルにするといい。このへんはリンカスクリプトの KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors))…

昔やったみたいに .ctors セクションに C++ で書き込むことは簡単にできる。C でも GCC 拡張を使えばいい。 #include <stdio.h> void ctor() __attribute__((constructor)); void ctor() { printf("ctor\n"); }</stdio.h>

起動順序としては、 main 以前に、 _start => __libc_start_main => __libc_csu_init => _init から、 __do_global_ctors_aux が呼ばれる。これは __CTOR_LIST__ と __CTOR_END__ の間を実行してまわる。この間には _GLOBAL__I_main や、 _GLOBAL__I_hoge.c …

main 以前

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

42696e617279322e30

殺伐ロゴ。あと Binary なんだから 10.0 じゃないかとか。

Ruby/Cpp

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

本5冊

どうでもいいことついでに本5冊とかが流行った時のメモが出てきたので超今さら感を漂わせながらはってみます。ところでこういう時に、「リクエストを受けたので本5冊を書いてみます」とか書いてもバレないなーと思った。 CPUの創りかた 心底作りたくなった。…

about

http://d.hatena.ne.jp/shinichiro_h/aboutちょっと書きました。基本的に正体明かしておく方針だったので写真とか前からどっかに置こうと思ってたけど、昔は持ってないという理由で、今はどれにしたらいいんだという(まぁメイドコスプレしてるヤツとかでもい…

C++のマングリングシンボルには

返り値型の情報は入っていない、ということにさっき気付きました。かなりショック。Dには入ってるのに。それと、「そもそもスクリプト言語でコンパイル言語のクラスを継承してそれをまたコンパイル言語側で使いたい」ってのは要するに Ruby/BulletML で、割…

継承とかしてみる

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

printf

それとこれは問題なく動いたから嘘ツキは死ねばいいと思った。 #include <stdio.h> int main() { int (*fp) (const char*, int); fp = printf; fp("%d\n", 1); return 0; }</stdio.h>

しー言語たぶん最後

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…

読むべきヘッダ

Linux と FreeBSD と NetBSD では dlfcn.h と link.h MacOSX では dlfcn.h と mach-o/dyld.h Win32 では windows.h

関数ポインタから任意関数を呼び出す

関数の型がコンパイル時に決まるなら ( (int (*) (const char* s))0x80482cc)("hello"); とかでいい。(ちなみに puts がここにロードされてた)たぶん libffi でイケるけど Linux 以外では未確認。

ファイル名からシンボル一覧を取得する (nm相当)

ぶっちゃけ nm しておいてパーズでもいい、が…libbfd を使うのが基本。基本的には、 bfd_read_minisymbols を使ってそれで得られたものを bfd_minisymbol_to_symbol で変換するのがいいと思う。 bfd_read_minisymbols の第二引数は 0, 1 で指定するダイナミ…

起動後に共有ライブラリの名前とアドレスを取得する

最初のができるなら問題無いけど、 dlopen の返り値使えばもっと速かったりとか。 Linux と FreeBSD は dlopen の返り値を dh として、 dlinfo(dh, RTLD_DI_LINKMAP, &lmap) 。 MacOSX では、うーんよくわからない。 _dyld_* は起動時の状態しか取れないよう…

共有ライブラリをオープンする

基本は dlopen 。まぁよくやられてるのでサンプル豊富。 Linux, FreeBSD, NetBSD では dlopen 。 MacOSX では dlopen か NSAddImage(name, NSADDIMAGE_OPTION_WITH_SEARCHING) かな。 Win32 では LoadLibrary(name) ていうかまぁ、 dlsym もサンプル豊富なの…

自分のプロセスの名前を取得する

これ、案外できない。 argv[0] ですむ場合が多いんだけど。 Linux では /proc/self/exe くらいかな。 FreeBSD では dlinfo(RTLD_SELF, RTLD_DI_LINKMAP, &lmap) で自分自身も入ってくる。 MacOSX は _dyld_* で自分自身も入ってくる。 Win32 では GetModuleH…

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