FastMMを使用してバッファオーバーフロー(以下BOに省略)している行を特定したいです。現在の設定ではBOしたメモリを取得した行はログに残るのですが、実際にBOした行が特定出来ません。FastMM4Options.incのどのオプションを有効にすれば良いかご存じの方はいらっしゃいますでしょうか?一通り目を通したつもりですがそれらしきオプションを見つけることが出来ませんでした。
※実際はC++Builderを使用していますがDelphiの方がFastMMユーザーが多そうなのでこちらで質問させて頂きました。
char *p = (char *)malloc(4); // ←この行(メモリを取得した場所)がログに残る
*(p + 10) = 0; // ←この行(実際にBOした場所)をログに残したい
free(p);
使っているバージョンとエディションを書かれた方が良いと思います。
お世話になります。
開発環境は以下のとおりです。
FastMM 4991
C++ Builder 5 Pro
Win 7 Pro SP1 64bit
回答がつかないのは多分FastMMにそんな機能はないからではないかと(FastMMのオプションはFastMM4Options.incを見るとわかるはず)。
Delphiであれば範囲チェックを有効にすることで配列の範囲外へのアクセスを実行時エラーとすることができますけれども…。
C++BuilderではCodeGuardでどうにかできたりしませんか?
Delphiで同様のコードを記述してFastMMと範囲チェックを付けて範囲外へアクセスしてみましたが
アクセス時はエラーにならず、処理やイベントの終了時に実行時エラーが出るみたいですね。
確保したメモリ量とアクセスする範囲が異なるのは根本的にプログラムのミスですので
ミスの箇所を探す方が良いかと思います。
CodeGuardはC++Builderの話になってしまうのであまり深くは言及しませんが
エラーを検出したりしなかったり、
Aaccess Violationを起こしてIDEを不安定にしたりなど問題がありまして
そこらへんの原因が特定できなかったので使用をあきらめました。
また、ソースコードは膨大な量があり、かつ10年以上前に他の人が作成したものなので
FastMMを使って場所を特定出来たら楽かなと思い導入した次第です。
しかし地道に探すしかないですかね・・・
ツイート | ![]() |