BoundsChecker VS Purify
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG0002デフォルトの名無しさん
NGNG0003名無しさんです@お腹いっぱい。
NGNG0004名無しさん@お腹いっぱい。
NGNGBoundsChecker体験版のプロテクト外しを教えてくれたら、教えたげる。
0005デフォルトの名無しさん
NGNG両方は使えない環境にいるのが普通。いたとしても、極まれ
である。
よって、1の質問は解決するみこみなし。
1が両方買って評価し報告すること。
0006名無しさんi586
NGNG000729
NGNGBoundsCheckerはときどきCマガに評価版入ってるから、
それで評価してよ。
おれも知りたい。
自費で買おうかと思ってるくらいだから。
0008sage
NGNGWin2000だと、OSのHeapコードにバッファオーバーランを検知する
機能がついてて、それを使うから、バッファオーバーラン検知に
にはどっちも必要ない。メモリリークも、リークしてないのに
リークしてるって過敏に反応するから使えない。自分でアロケーション
コードにラッパーをかまして発見したほうが楽で早い。
使えそうな機能としては、Purityにはプロファイラ機能があるみたいだから
それと、BoundsCheckerのStack上の変数のバッファオーバーランを
検知する機能だな。まあ君が何のために使いたいのかはっきりしてるなら
このアドバイスでどっちを買えばいいかわかるだろ。
どうしても両方使って評価してほしいなら両方使えるからやってやってもいい。
ただ全機能を評価するのはいやだから、どの機能について比較すれば
いいのか言ってくれ。
00097
NGNG0010デフォルトの名無しさん
NGNGWindowsディレクトリに入るなんだったかのファイルに、time_t->文字列
したのが入っていた。もう3年位前の話だが。
0011デフォルトの名無しさん
NGNG0012尻たがり
NGNGやりすぎの感はありますが、あてになるほうだと思います。
やや分かりづらいですが、一通りチェックする価値はあります。
すぐ慣れるし。
何で困ってる次第でしょう、多分。
>8
Win2000でのバッファオーバーラン検知機能は標準でしょうか?
Platform SDKでしょうか?よかったらお教えください。
0013デフォルトの名無しさん
NGNGあなたの言う「評価」は、通常使われる「評価」ではありません。
すみやかに殻から出ることをお勧めします。
0014デフォルトの名無しさん
NGNG>自分でアロケーション
>コードにラッパーをかまして発見したほうが楽で早い。
こういう勘違いは恥ずかしいのでやめてください。
0015デフォルトの名無しさん
NGNGプロファイラ(TrueTime)もついてるよ。
00168
NGNG>>14 どこが勘違いなのか教えてくれや。
>>12
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
の下にプログラムのファイル名でキーを作って、そのなかにREG_SZで
GlobalFlagって名前の値を作って、そこに"0x02000000"を書き込む。
そうするとそのプログラムに対してHeapCheckingがイネーブルになる。
a = (LPBYTE)HeapAlloc(GetProcessHeap()@` 0@` 100);
*(a + 100) = 0;
HeapFree(GetProcessHeap()@` 0@` a);
こういうBugならHeapFreeの中でとまるから、一発でわかる。
a = (LPBYTE)HeapAlloc(GetProcessHeap()@` 0@` 100);
HeapFree(GetProcessHeap()@` 0@` &a);
こういうBugはイネーブルにしなくてもデバッガーにはメッセージが
表示されるけど、イネーブルすると、AVでとまるようになるから、より
問題を発見しやすくなる。
malloc@`newはNT4まではちょっと面倒だったんだが、W2Kからmallocは
OSのHeapAllocをそのまま呼ぶようになったから、HeapCheckingが使えるように
なった。以前は、_set_sbh_threshold(0)を呼んでVC-Runtimeの
Heapコードをディスエーブルしなくちゃならんかった。
ただ、VC-Runtimeのなかで、16バイト境界に揃えるコードが入っているから
a = (LPBYTE)malloc(100);
*(a + 100) = 0;
は引っかからない。*(a + 112) = 0にしないと駄目。どうしても1バイト
オーバーランを見つけたい場合はVC-Runtimeのリビルドで対処。
00178
NGNG同じキーのなかにPageHeapFlagsっていう値をREG_SZで作ってそこに1を書き込むと
HeapCheckingがもうちょっと強力になる。具体的には、アロケートされたメモリを
4Kページの末尾にフィットするようにして、次の4Kページをアクセス不可にしてる。
これにより、実際にオーバーランを起こした瞬間にAVが発生するようになる。
ただ、8バイト境界に揃えられてるので
a = (LPBYTE)HeapAlloc(GetProcessHeap()@` 0@` 100);
*(a + 100) = 0;
では引っかからずに、*(a + 104) = 0; じゃないと引っかからない。
あと、これをイネーブルにするとメモリを大量に食うことになる。
どんな小さなアロケーションでも2ページ使用するからね。
0018デフォルトの名無しさん
NGNGつーか、「殻」ってW2Kの「殻」のこと。
PurifyってNT4でもUnixでも使えるっつーの。
0019デフォルトの名無しさん
NGNGどうして、「自分は何かを評価して、他人に説明できる」
なんて、ゴーマンなこと思っちゃったりするワケ?
002018
NGNG0021デフォルトの名無しさん
NGNGW2Kローカルの、しかも自分ローカルなテクニックを対比させている
ところがマヌケってとこに気づかないのが痛いね。
00228
NGNG噛み付くねえ。
ラッパーの説明じゃないよ、君たちに対してresしたわけじゃないから。
12が聞きたいって言うから書いてあげたの。
楽で早い説明はできないな。そんなの説明するまでもないもん。
まあ、コードを理解しないでカット&ペーストでプログラム書いている
人にはわからんがな。
君こそラッパーが駄目な理由まったく書いてないんだけどね。
まあ自分でビルドが出来ないライブラリの中のリークはツールを
使うしかないが、それはまれだろ。君がUnixを使ってるなら
ソースがついてるんだから、自分でビルドして解明できるから
なおさらだよな。
PurifyとBoundsCheckerの機能評価の話にOS側の機能を対比させるのの
どこがおかしいん?
OS側にこれくらいの機能がついてれば、Purify&BoundsCheckerを使って
見つけるバグの大部分は見つかるだろ。だからあんまり必要ねーんじゃ
ないのって書いたのにね。1がUnixを使ってるなら無視すればいいだけのこと。
外野が噛み付くのはウザイ。
まあ、君は高い使えこなせもしないツールに囲まれて仕事してくれや。
W2Kの殻に入ってるっていわれりゃそりゃそうだ。Winだけで食えてるし
Unixは必要になったらやるわ。じゃあおれはこれで逃げる。じゃあな。
0023デフォルトの名無しさん
NGNG0024デフォルトの名無しさん
NGNGうん。
もうちょい説明お願い > 8
ラッパーって、コードを変更しなきゃ駄目なの?
0025尻たがり
NGNG丁寧な回答ありがとうございます。
勉強になりました。
勘違いな突っ込みにめげず、これからも小さな親切御願いします。
0026名無しさんi486
NGNG002723-24
NGNGアホな解説したら撃沈しようと手薬煉引いて待ってたのに。
0028デフォルトの名無しさん
NGNG0029デフォルトの名無しさん
NGNGオレも勉強になった。これから試してみるッス。
所で 偶にこーゆう技を書いてくれるヒトがいますけど、
こーうのって どうやって見つけてるんでしょうね。MSDNとかかな?
>PurifyとBoundsCheckerの機能評価の話に
その目的と多機能ゆえに複雑な使用法を想像すれば
8 は試してみる価値のある方法を紹介してくれたと思うのだが?
0030デフォルトの名無しさん
NGNGそのものズバリの本があるから探してみれ<Windozeでのデバッグ
003129
NGNGニャー!(了解!)
■ このスレッドは過去ログ倉庫に格納されています