トップ «前の日記(2008-08-14) 最新 次の日記(2008-08-17)» 編集

はじめてのにき

ここの位置付け

2004|11|
2005|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|

ToDo:


2008-08-16

_ 明日

1時から SRM かー。 久々に参加したいな。

(01:51)

_ valgrind

むずかしいなぁ。 マクロが冗談みたいに多い。 まぁでもマジメに斜め読みすると それなりにわかったり 全然わからんかったりするな。 いや何もわかってないな。

たぶんなんか

  • 起動して tool 起動。こっちの世界が client 。
  • シンボル読みにかかる。バイナリ→共有オブジェクト→tool→vgpreload_core.so→vgpreload_tool.so
  • でヘンなシンボルは redir がなんかいじる。
  • んで guest が simulated CPU 上で動く
  • フックされた malloc に来て、 VALGRIND_DO_CLIENT_REQUEST でたぶん client と通信する
  • したらなんか VG_(needs_client_requests) に刺した hook が client サイドで呼ばれる。

ここで

#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)

_

mayah さんとこふっかつしてる。

おめでとうございます。

(16:50)

お名前:
E-mail:
コメント:
人生、宇宙、すべての答え
本日のリンク元

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
1.星一(2014-05-24 01:41) 2.なかむら(う)(2014-05-24 01:41) 3.星一(2014-05-24 01:41)
search / home / index

全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。

shinichiro.hamaji _at_ gmail.com / shinichiro.h