1

不正なコードを調査しています。アプリケーション検証ツールは、以下の呼び出し後にヒープが破損していることを示しています:

AA!Class::Function+dbaf

マップ ファイルを持っています。上記の情報とマップ ファイルに存在する情報を使用して、行番号に到達する方法を教えてください。

優先ロードアドレスは00400000

0002:00000dc4       __imp_?Class@Function@@QAEXV?$vector@Uty_point@@V?$allocator@Uty_point@@@std@@@std@@0PAV23@@Z 0049bdc4 

注:クラスと関数名を匿名化しました。

4

3 に答える 3

1

マップファイルしかありませんか?PDBがありませんか?完全なシンボルがある場合は、WinDBG でマップと .pdbs (および .exe) を使用します (Windows を使用していますか?)。関数の名前がどのように与えられたかを見て、あなたはそう思っていると思います。

そうでない場合... dbaf があなたの答えです。それは何に相当しますか?オフセットは、誤った命令の場所でなければなりません。もちろん、それぞれが持っている命令 (アセンブリ命令) の数を把握する必要があります。

于 2011-08-10T09:36:04.000 に答える
0

マップファイルとEIPの値(命令ポインター、コードがクラッシュしたアドレス)だけで障害のあるコードにジャンプできたのを覚えています。グーグルですばやく検索すると、このWebページ:マップファイルとDLLリベースが見つかりました。理想的な状況で私が覚えていることから、Visual C ++デバッガーでEIPの値を直接変更すると、対応するコード行にジャンプします。

さて、これは本当にずっと前のVisual C ++ 6の時代でしたが、今日でも適用できるかどうかさえわかりません。すでに指摘したように、Visual C ++のシンボルとプログラムデータベースオプションを実際に調べる必要があります。それらのセットアップと使用方法については、たくさんの情報があります。

于 2011-08-11T09:20:14.817 に答える