Bin
なんか行情報読むとかそいう話題が 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…
ということを始めてみました。とりあえず手軽にさわれたアーキテクチャを適当に。http://shinh.skr.jp/h/?FizzBuzzAsmなんか HP の test drive が終わってて ia64 が無くて悲しかった。あと学生だった時は Sparc あったのになぁとか。 sh-gcc はどっかにあっ…
ちょっと調べてみました。複数種類のレジスタ使ってレジスタ渡ししてるから大変だと思うんですよね。 0x7fffeca14960: (nil) 0 0.000000 (RDIの値ではないけど、数値引数を消費してない時はRDIが入るっぽい) 0x7fffeca14968: 0x2 2 0.000000 (RSI) 0x7fffeca…
行ってきました。大変楽しかった。適当にベンチ取って結果発表したのでそのスライド置いときます。現地で作ったけどやはり mkp.rb は性にあうなぁ。http://shinh.skr.jp/llvmbench/000.html何が言いたいかよくわからんけど、言いたかったことは SSA 大変だけ…
valgrind コマンドを叩くと普通に main が動きます。 main は coregrind/launcher-linux.c にあります。ごちゃごちゃと環境を調べたり tool を調べたりした後、情報を残すために環境変数をいじったりした後、即 tool を execve して終了します。で、 tool な…
あんま深く考えず valgrind を Ruby の head のテストに適用してみたところ、結構もにょもにょ漏れてるもんだなぁと気付いたので、いくつか修正してみたりしたのですが、その時案外困るのが、リークする最小のコードが簡単に作れない、ってことでした。 valg…
ことほどさように main は全人類の至宝 LD_PRELOAD をもってしても簡単に奪えないということは、 main 蹂躙厨の間では有名な事実なのですが、 valgrind 使うと割に簡単なことに気付きました。いつも通り Hello, world を書きます。 #include <stdio.h> int main() { p</stdio.h>…
前回の話は解決案1 が MacOSX でできました。この中に入ってる sdlboot の方がまぁ完全性は高いんじゃないかなーと思います。使いかたはだいたい同じ。http://shinh.skr.jp/binary/main_hook.tgzでついでに main_hook というライブラリにしておきました。 CP…
たぶん SDL + MacOSX の非 C で起きる問題を解決できそうな方法を実装してみました。とりあえず MizuGame (C#) 動いた。http://d.hatena.ne.jp/fslasht/20080804#1217853380下記のファイルをhttp://shinh.skr.jp/osxbin/sdlboot.tgz展開して出てきた sdlboot…
色々あって GC に興味がちょっと出たので色々見てました。とりあえずまとまった日本語資料としては以下の PDF が一番良いように思いました。 kinaba さんがちょっと前に言及しておられたえんどう豆的でない方の遠藤さんが書いた文章らしい。http://matsu-www…
http://d.hatena.ne.jp/hayamiz/20080629/1214745930これはきっと shiro さんがすごく面白いコメントを書いてくださるんだろう…と思ってたけどそうでもないみたいなので、まとまりのない話を書く。まずなんか「なんでも継続」にあるhttp://practical-scheme.…
definemethod や defineclass をそれっぽく実装したのがメインかなぁと。他にもなんちゃら array とかそのへんを適当に。http://shinh.skr.jp/tmp/yajit.tgzあとは throw やればそれなりにコードが動く気がする。
つーわけで yajit アップデートしときました。http://shinh.skr.jp/tmp/yajit.tgzやったことは 上に書いてある OSX の件 putself をいい加減に修正して const をいいかげんに実装したので benchmark モジュールが動くようにした expandarray 実装したから a,…
状況としては、「yajit がコンパイルしたコードが yajit 内の関数を呼んだ後で libruby の関数を呼んだ場合にのみ」に落ちるというもので、 gdb で落としてみると、 Program received signal EXC_BAD_INSTRUCTION, Illegal instruction/operand. 0x8fe13184 …
機能は増やさず、 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 関係のエラーでコケる…
ふと思い立って YARV からの JIT コンパイラを Xbyak で書き始めてみました。 x86 と x86_64 を両方サポートするつもりだったけど、とりあえず適当にやりすぎて x86_64 に依存しまくってしまったのでとりあえず現状そっちだけ。今度 x86 対応はちゃんとやる…
常に忘れるよ! x86 EAX, ECX, EDX は破壊して良し。逆に言うと EBX, EDI, ESI は保存すること。引数はスタックで後ろから順に。浮動小数返す時は FPU のスタックトップを使う。渡す時は普通にスタック上で。linux のシステムコールは EAX, EBX, ECX, EDX に…
なんかまず kernel はどうやったもんかなと思ったのでやめておくことに。端末とかも追わないので不完全ではありますが、趣旨としては、以下の非常に高度な技術が詰め込まれたコードがどれだけ大変なことになって実行されているかというようなことを肌で感じ…
で、そういう理由でこう、何度目かの backtrace 実装とかしてたんですが、 glibc の backtrace って DWARF2 使う実装とかあるんだなーと気付いた。 GCC ならこれ使うのが一番楽だし、 -fomit-frame-pointer ついてても大丈夫とか偉い。 // They are in libgc…
このへんで書いた、どうなってるか自信が無いことがあったらとりあえず objdump しちゃえという話…とか言うと「アセンブリは…」みたいな雰囲気になることが多い気がするんですが、正直アセンブリなんか読めなくてもコードがどうなってるかくらいはわかるよん…
なんとなく小さい Web サーバを書いてみました。 Web サーバというかどんなリクエストでも固定応答するだけ。http://shinh.org:40960/例のごとく 58Byte Hello を参考に。まだ縮むと思うけど飽きた。 BITS 32 ORG 0 DB 0x7F ; e_ident entry: inc ebp ; e_id…
すばらしい。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…
を書いてみました。要は再配置情報を一度手で書いてみたかった。これでコンパイラ書ける気がする。http://shinh.skr.jp/binary/hello_libc.asmProgram header に INTERP と DYNAMIC を作ってやって、適当に埋めてやれば良いみたい。関数を探される心配はない…
http://shinh.skr.jp/obf/bingolf.htmlなんかなかったので作っておきました。よくわかってない部分あるのでまだ縮むかも。 Mach-O ヘッダが 28B で 56B の LC_SEGMENT ロードコマンドと 80B の LC_UNIXTHREAD ロードコマンドで、ロードコマンド二つがどっぷ…
http://homepage3.nifty.com/mogami/diary/d0708.html#071このへんとか見てて、そういえばこの MacOSX は x86 だった…! と思い出しました。一度思い出してみると、 linux の dmd が動かんのがとても奇妙に思えてきたのですが、でまぁそのへんの違いを再度吸…
ふと GC って動作中のソフトのメモリリーク検出に使えるよなー、とこないだふと思ったのが一つあって、まぁ実のところそんなもん誰でも思いつくわけで LL の最中に Boehm GC 眺めてたら、やっぱそういうフラグがあって、 GC_find_leak = 1; とかしてから GC_…
おお面白そうな。http://memo.wnishida.com/?date=20070411#p01なんかぱっと見た感じ、 push/pop はいらない、 EBX は inc EBX 、ってとこでしょうか。binfmt_flat はわざわざ kernel module 書かなくても binfmt_misc でサクっと書けると思ったので書いてみ…
拘束具なわけですよ。でリミッタ外すと暴走しやすくなっちゃうという。例えばこの挙動説明できますかーという話。 #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>…