Bin

DWARF の行情報を読む

なんか行情報読むとかそいう話題が twitter にあったので、適当に作ってあったのでなんか書いてみる。http://github.com/shinh/test/blob/master/addr2line.ccDWARF 情報つけると (今の GCC だと -g でつくと思う) アドレスからコードの名前を行番号をひける…

大変なバグというか出力データ内のバグというか

TCC というコンパイラをいじって遊んでいるのですが、簡単なバグから潰しているので、だんだんと混み入ったバグになってきました。今いじっているのは、 ./tcc tcctest.c && ./a.outとして実行した結果と、 ./tcc -DTCC_TARGET_X86_64 tcc.c -ldl -g -o tcc2…

FizzBuzz のアセンブリを収集する

ということを始めてみました。とりあえず手軽にさわれたアーキテクチャを適当に。http://shinh.skr.jp/h/?FizzBuzzAsmなんか HP の test drive が終わってて ia64 が無くて悲しかった。あと学生だった時は Sparc あったのになぁとか。 sh-gcc はどっかにあっ…

var args のスタック配置 on x86-64

ちょっと調べてみました。複数種類のレジスタ使ってレジスタ渡ししてるから大変だと思うんですよね。 0x7fffeca14960: (nil) 0 0.000000 (RDIの値ではないけど、数値引数を消費してない時はRDIが入るっぽい) 0x7fffeca14968: 0x2 2 0.000000 (RSI) 0x7fffeca…

LLVM勉強会

行ってきました。大変楽しかった。適当にベンチ取って結果発表したのでそのスライド置いときます。現地で作ったけどやはり mkp.rb は性にあうなぁ。http://shinh.skr.jp/llvmbench/000.html何が言いたいかよくわからんけど、言いたかったことは SSA 大変だけ…

valgrind (1)

valgrind コマンドを叩くと普通に main が動きます。 main は coregrind/launcher-linux.c にあります。ごちゃごちゃと環境を調べたり tool を調べたりした後、情報を残すために環境変数をいじったりした後、即 tool を execve して終了します。で、 tool な…

Rubygrind

あんま深く考えず valgrind を Ruby の head のテストに適用してみたところ、結構もにょもにょ漏れてるもんだなぁと気付いたので、いくつか修正してみたりしたのですが、その時案外困るのが、リークする最小のコードが簡単に作れない、ってことでした。 valg…

valgrind で main 奪う

ことほどさように main は全人類の至宝 LD_PRELOAD をもってしても簡単に奪えないということは、 main 蹂躙厨の間では有名な事実なのですが、 valgrind 使うと割に簡単なことに気付きました。いつも通り Hello, world を書きます。 #include <stdio.h> int main() { p</stdio.h>…

main_hook / sdlboot / libGPL

前回の話は解決案1 が MacOSX でできました。この中に入ってる sdlboot の方がまぁ完全性は高いんじゃないかなーと思います。使いかたはだいたい同じ。http://shinh.skr.jp/binary/main_hook.tgzでついでに main_hook というライブラリにしておきました。 CP…

SDL + MacOSX + any lang

たぶん SDL + MacOSX の非 C で起きる問題を解決できそうな方法を実装してみました。とりあえず MizuGame (C#) 動いた。http://d.hatena.ne.jp/fslasht/20080804#1217853380下記のファイルをhttp://shinh.skr.jp/osxbin/sdlboot.tgz展開して出てきた sdlboot…

SGC

色々あって GC に興味がちょっと出たので色々見てました。とりあえずまとまった日本語資料としては以下の PDF が一番良いように思いました。 kinaba さんがちょっと前に言及しておられたえんどう豆的でない方の遠藤さんが書いた文章らしい。http://matsu-www…

トランポリン

http://d.hatena.ne.jp/hayamiz/20080629/1214745930これはきっと shiro さんがすごく面白いコメントを書いてくださるんだろう…と思ってたけどそうでもないみたいなので、まとまりのない話を書く。まずなんか「なんでも継続」にあるhttp://practical-scheme.…

今週の Yajit

definemethod や defineclass をそれっぽく実装したのがメインかなぁと。他にもなんちゃら array とかそのへんを適当に。http://shinh.skr.jp/tmp/yajit.tgzあとは throw やればそれなりにコードが動く気がする。

Yajit (3)

つーわけで yajit アップデートしときました。http://shinh.skr.jp/tmp/yajit.tgzやったことは 上に書いてある OSX の件 putself をいい加減に修正して const をいいかげんに実装したので benchmark モジュールが動くようにした expandarray 実装したから a,…

__dyld_stub_binding_helper_interface で落ちてた件

状況としては、「yajit がコンパイルしたコードが yajit 内の関数を呼んだ後で libruby の関数を呼んだ場合にのみ」に落ちるというもので、 gdb で落としてみると、 Program received signal EXC_BAD_INSTRUCTION, Illegal instruction/operand. 0x8fe13184 …

Yajit (2)

機能は増やさず、 x86 対応と ruby-1.9.0-0 対応と ruby-1.9.0-1 対応、バグ修正と mingw32, Cygwin, Mac OSX 対応などした。http://shinh.skr.jp/tmp/yajit.tgzCygwin は DEBUG つけないとなんか落ちる。 Mac OSX はテストの最中に GC 関係のエラーでコケる…

Yajit

ふと思い立って YARV からの JIT コンパイラを Xbyak で書き始めてみました。 x86 と x86_64 を両方サポートするつもりだったけど、とりあえず適当にやりすぎて x86_64 に依存しまくってしまったのでとりあえず現状そっちだけ。今度 x86 対応はちゃんとやる…

呼び出し規約

常に忘れるよ! x86 EAX, ECX, EDX は破壊して良し。逆に言うと EBX, EDI, ESI は保存すること。引数はスタックで後ろから順に。浮動小数返す時は FPU のスタックトップを使う。渡す時は普通にスタック上で。linux のシステムコールは EAX, EBX, ECX, EDX に…

Hello, world! 統計

なんかまず kernel はどうやったもんかなと思ったのでやめておくことに。端末とかも追わないので不完全ではありますが、趣旨としては、以下の非常に高度な技術が詰め込まれたコードがどれだけ大変なことになって実行されているかというようなことを肌で感じ…

backtrace

で、そういう理由でこう、何度目かの backtrace 実装とかしてたんですが、 glibc の backtrace って DWARF2 使う実装とかあるんだなーと気付いた。 GCC ならこれ使うのが一番楽だし、 -fomit-frame-pointer ついてても大丈夫とか偉い。 // They are in libgc…

息を吸うように objdump

このへんで書いた、どうなってるか自信が無いことがあったらとりあえず objdump しちゃえという話…とか言うと「アセンブリは…」みたいな雰囲気になることが多い気がするんですが、正直アセンブリなんか読めなくてもコードがどうなってるかくらいはわかるよん…

122Byte の Web サーバ

なんとなく小さい Web サーバを書いてみました。 Web サーバというかどんなリクエストでも固定応答するだけ。http://shinh.org:40960/例のごとく 58Byte Hello を参考に。まだ縮むと思うけど飽きた。 BITS 32 ORG 0 DB 0x7F ; e_ident entry: inc ebp ; e_id…

hogetrace が素晴らしいので僕と行情報

すばらしい。http://d.hatena.ne.jp/yupo5656/20071008/p1以下なんかもうちょい調べてから書けって感じの適当情報。なんか行情報読むとメモリ喰う&リークってのは、あのインターフェース(find_*_line はなんか一個アドレス渡してその行情報返す感じなので、…

適当にバックトレース

いがさんとの会話でなんか作ってたの思い出しました。 i@um ~> stacktrace w3mcooksrv /Users/i/426: No such file or directory. Attaching to process 426. Reading symbols for shared libraries . done Reading symbols for shared libraries ....... do…

C の関数を呼ぶ Hello, world!

を書いてみました。要は再配置情報を一度手で書いてみたかった。これでコンパイラ書ける気がする。http://shinh.skr.jp/binary/hello_libc.asmProgram header に INTERP と DYNAMIC を作ってやって、適当に埋めてやれば良いみたい。関数を探される心配はない…

130B, x86, Mach-O, MacOSX

http://shinh.skr.jp/obf/bingolf.htmlなんかなかったので作っておきました。よくわかってない部分あるのでまだ縮むかも。 Mach-O ヘッダが 28B で 56B の LC_SEGMENT ロードコマンドと 80B の LC_UNIXTHREAD ロードコマンドで、ロードコマンド二つがどっぷ…

MacOSX で linux バイナリでも動かしてみる

http://homepage3.nifty.com/mogami/diary/d0708.html#071このへんとか見てて、そういえばこの MacOSX は x86 だった…! と思い出しました。一度思い出してみると、 linux の dmd が動かんのがとても奇妙に思えてきたのですが、でまぁそのへんの違いを再度吸…

メモリリークとか

ふと GC って動作中のソフトのメモリリーク検出に使えるよなー、とこないだふと思ったのが一つあって、まぁ実のところそんなもん誰でも思いつくわけで LL の最中に Boehm GC 眺めてたら、やっぱそういうフラグがあって、 GC_find_leak = 1; とかしてから GC_…

binfmt_flat

おお面白そうな。http://memo.wnishida.com/?date=20070411#p01なんかぱっと見た感じ、 push/pop はいらない、 EBX は inc EBX 、ってとこでしょうか。binfmt_flat はわざわざ kernel module 書かなくても binfmt_misc でサクっと書けると思ったので書いてみ…

C のヘッダファイルなんてのは…

拘束具なわけですよ。でリミッタ外すと暴走しやすくなっちゃうという。例えばこの挙動説明できますかーという話。 #include <stdio.h> int main() { printf("%f\n", sinf(10)); } こんな普通のコード。 i@um ~/test> gcc fsin.c fsin.c: In function 'main': fsin.c:3</stdio.h>…

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