FastMMでバッファオーバーフローしている行を特定したい


たろ  2016-10-13 19:38:09  No: 48349

FastMMを使用してバッファオーバーフロー(以下BOに省略)している行を特定したいです。現在の設定ではBOしたメモリを取得した行はログに残るのですが、実際にBOした行が特定出来ません。FastMM4Options.incのどのオプションを有効にすれば良いかご存じの方はいらっしゃいますでしょうか?一通り目を通したつもりですがそれらしきオプションを見つけることが出来ませんでした。

※実際はC++Builderを使用していますがDelphiの方がFastMMユーザーが多そうなのでこちらで質問させて頂きました。

char *p = (char *)malloc(4); // ←この行(メモリを取得した場所)がログに残る
*(p + 10) = 0; // ←この行(実際にBOした場所)をログに残したい
free(p);


arigayas  2016-10-15 22:17:34  No: 48350

使っているバージョンとエディションを書かれた方が良いと思います。


たろ  2016-10-17 18:18:51  No: 48351

お世話になります。
開発環境は以下のとおりです。

 FastMM 4991
 C++ Builder 5 Pro
 Win 7 Pro SP1 64bit


通りすがり  2016-10-18 02:02:51  No: 48352

回答がつかないのは多分FastMMにそんな機能はないからではないかと(FastMMのオプションはFastMM4Options.incを見るとわかるはず)。
Delphiであれば範囲チェックを有効にすることで配列の範囲外へのアクセスを実行時エラーとすることができますけれども…。
C++BuilderではCodeGuardでどうにかできたりしませんか?


take  2016-10-18 17:38:16  No: 48353

Delphiで同様のコードを記述してFastMMと範囲チェックを付けて範囲外へアクセスしてみましたが
アクセス時はエラーにならず、処理やイベントの終了時に実行時エラーが出るみたいですね。

確保したメモリ量とアクセスする範囲が異なるのは根本的にプログラムのミスですので
ミスの箇所を探す方が良いかと思います。


たろ  2016-10-18 19:11:49  No: 48354

CodeGuardはC++Builderの話になってしまうのであまり深くは言及しませんが
エラーを検出したりしなかったり、
Aaccess Violationを起こしてIDEを不安定にしたりなど問題がありまして
そこらへんの原因が特定できなかったので使用をあきらめました。

また、ソースコードは膨大な量があり、かつ10年以上前に他の人が作成したものなので
FastMMを使って場所を特定出来たら楽かなと思い導入した次第です。

しかし地道に探すしかないですかね・・・


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加