ToDo:
むずかしいなぁ。 マクロが冗談みたいに多い。 まぁでもマジメに斜め読みすると それなりにわかったり 全然わからんかったりするな。 いや何もわかってないな。
たぶんなんか
ここで
#define __SPECIAL_INSTRUCTION_PREAMBLE \ "roll $3, %%edi ; roll $13, %%edi\n\t" \ "roll $29, %%edi ; roll $19, %%edi\n\t"
これはなんだ!
さすがに 64bit の bit rotate は NOP に過ぎないことはわかるので、 まぁたぶんこの instruction 列を見たら client にビビビっ っていうか simulated CPU における割込みみたいな感じかな。
でめでたく client の世界に戻ってきたとして、 こっちから guest の世界の関数を呼ぶとすぐ死ぬ。 何もせず帰るくらいなら大丈夫なんだけど。 まぁたぶんアドレスがズレてる…とかだと思う。 これがわかれば
Note that you can't use anything from the C library (there are deep reasons for this, trust us).
とかいうナメたアドバイスの意味がわかるのだが。 http://valgrind.org/docs/manual/writing-tools.html#writing-tools.otherinfo
で client の世界から guest の世界のメモリとかは見えてるわけだけど、 データ通信とかはどうやってるねん。 単に client request だけで十分なのか。
意味不明なメモ書いてたら まぁなんとなく整理できてきた…
本当だろうか
(05:00)
valgrind を gdb で走らすと tool の開幕でいきなり sigtrap くらうわけだけど、 これはなんだろうなぁ。
launch するまでには ptrace とかやってるんかなぁ。 コードはあるけど strace では出てこない。
つか gcc に渡してるオプションが既におかしいな…
gcc -Wno-long-long -Wno-pointer-sign -Wdeclaration-after-statement -fno-stack-protector -o rmemcheck-amd64-linux -static -Wl,-defsym,valt_load_address=0x38000000 -nodefaultlibs -nostartfiles -u _start -m64 -Wl,-T,../valt_load_address_amd64_linux.lds rmemcheck_amd64_linux-mc_leakcheck.o rmemcheck_amd64_linux-mc_malloc_wrappers.o rmemcheck_amd64_linux-mc_main.o rmemcheck_amd64_linux-mc_translate.o ../coregrind/libcoregrind_amd64_linux.a ../VEX/libvex_amd64_linux.a -lgcc
tool の直接実行は怒られる、と。
> ./memcheck/memcheck-amd64-linux ls valgrind: You cannot run './memcheck/memcheck-amd64-linux' directly. valgrind: You should use $prefix/bin/valgrind.
もちょいちゃんと追わんとわからんね。
(05:22)
前 | 2008年 8月 |
次 | ||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。