仕事で、SH7149を使用し、HewのVer4.5を利用してとあるプログラムを組んでいます。
ソフト注入、デバッグはAone社のAHデバッガー、AH7000です。
現象は、とある変数をコメントアウトすると強制割り込みが掛かり、ソフトがそこで止まってしまうというものです。
最初、膨大な量のデータをストックしておく必要があり、グローバル変数に「A[200][10][10]、B[200][10][10]」という変数を宣言しました。
が、グローバル領域に宣言すると容量が足らず、仕方なくMain関数内に一時保管させようという考えで上記変数を宣言し、グローバル宣言した配列は削除しました。
その後、プログラムを作成していく上で、上記配列を使用しなくてもよくなり、コメントアウトしてコンパイルをかけ、コンパイルは成功しました。
その後ソフトを注入し、デバッグをしようと思ったのですが強制割り込みでソフトが全く動かなくなってしまったのです。
試しにコメントアウトを元に戻すと、ソフトはこちらの思ったように動くようになりました。
どなたかこのような現象をご存じではないでしょうか?
よろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
もっとも考えられるのは、その使われていない変数のアドレス付近にある別の(使われている変数)で、不正アクセス(あるいはバッファオーバフロー)が起きているてことだと思います。
たとえば、
int array[2]; // 使われている変数
int A[200][10][10]; // 使われていない変数。だけど、消すとなぜか誤動作する。
int usedData; // 使われている変数
int main()
{
usedData = 1; // usedDataを1にセット!
array[2] = 0; // 不正な書き込み、ホントはarray[2]は存在しない
if (usedData == 1) {
// 正常ならこっちにくるはず
} else {
// int A[200][10][10];をコメントアウトするとなぜかこっちに…
}
}
てな状況なんでしょう。
使われていない、int A[200][10][10]; が残っていれば、array[2] = 0 という不正な書き込みがあっても、usedDataは(たまたま)破壊されませんが、
int A[200][10][10]; をコメントアウトすると、array[2] = 0; でusedDataが破壊されてしまって誤動作するようになります。
デバッガが使えるなら、使っていないはずの int A[200][10][10]; を誰かが(意図せずに)読み書きしていないかを確かめましょう。Aにウォッチポイントをしかけておけばいいです。
ウォッチポイントを使えない場合には、
int A[200][10][10];
のサイズを、ちょっとずつ小さくしていって、どこまで削ると誤動作するかを調べて、まずは、どのアドレスに不正アクセスがあるか目星をつけるのから始めるのがいいと思います。
No.1
- 回答日時:
ご質問の状況に該当するか否かはワカリマセンが、思いついたコトを・・・。
たぶん、その変数の領域を勝手に使い込んでいる関数かサブルーチンがあるハズです。
例えば配列型の変数で、本当に必要な分だけの宣言がされていないとか。
ポインタ型の変数で、キチンと初期化されていないとか。
変数がある間は、その変数の内容が破壊されているのに、見た目は正常に動いています。たぶん、使われていない時に破壊されているかな。
変数をコメントアウトすることで、他の変数を破壊するようになって、結果として強制割り込みが発生しているのでしょう。
デバッガーで変数の値の変化を追っかけてみるか、周辺の変数を辿っていけばバグが見つかると思いますよ。
回答ありがとうございます。
うーん、本当に宣言しているだけでまったく使用していないものでした。
でもほかの変数を破壊というのは、なんとなくデバッグ中にあった現象と似ている気がしています。(ローカル変数の値が勝手に書き変わっていたことがあり)
この土日、そこを重点に見てみたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- デスクトップパソコン ん~…分からん 7 2022/06/10 10:47
- C言語・C++・C# 競技プログラミングに関する質問です。 3 2022/04/03 19:51
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- C言語・C++・C# Cのコンパイルでコメントアウトをそのままオブジェクトに保持したい 7 2023/08/01 22:22
- Visual Basic(VBA) エクセルVBA コードが同じでもファイルによって処理速度が大きく変わるのはなぜ 5 2022/11/06 21:34
- インターネット広告・アフィリエイト アフェリエイトサイト 作成について 5 2022/05/13 21:31
- その他(ゲーム) アタリショックを起こしたクソゲー「E.T.」 どんな内容なら失敗しなかったか? 3 2023/05/07 09:33
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Officeソフトで印刷の入稿デー...
-
三菱A6PHPを入手したいの...
-
履歴書に書いていい「使用可能...
-
不動産業で、間取り図や区画図...
-
フォトショップレンダリング
-
カルテに使用する画像のテンプ...
-
書体デザイナーのソフト?
-
アフターエフェクトでできること
-
DTP作業環境の改善
-
AutoCADで元に戻すがきかなくな...
-
ソフト食について
-
ホームページ制作に必要なソフ...
-
超初心者ですのでお手柔らかに...
-
まちづくりでの用語ハード・ソ...
-
ホームベーカリーで皮が硬い
-
プロのイラストレーターが使っ...
-
iPadでDTPは可能ですか?
-
PDFデータのサイズはどれく...
-
拡張子「.icd」のCADデータを開...
-
illustratorでの金と銀
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
NCプログラムの入出力について...
-
Officeソフトで印刷の入稿デー...
-
まちづくりでの用語ハード・ソ...
-
不動産業で、間取り図や区画図...
-
PDFファイルの一部を切り取り、...
-
履歴書に書いていい「使用可能...
-
クラリスドローのようなソフト
-
CATIA(CAD)のデータを読めるフ...
-
三菱A6PHPを入手したいの...
-
【 3DCGソフト⠀MAYAについての...
-
ホームベーカリーで皮が硬い
-
ITの専門学校ってなぜMacBookだ...
-
刺繍屋さんの開業についえ
-
CMYK変換と自由に切り抜きが出...
-
windows版CS6で画像を収集する方法
-
AutoCADで元に戻すがきかなくな...
-
2次元CADに塗り絵をするには
-
古本の市場価格?
-
住所データをマップに落としたい
-
古いマック用映像処理ソフト探...
おすすめ情報