0

cab を解決するために cdb (winDBG のコマンド ライン バージョン) を使用しています。出力をファイルに取得するには、-logo 出力を使用して出力ファイルを指定します。特定のキャブでは、「CvRegToMachine(x86) conversion failure for 0x7536」が 100 万回以上発生しています。
基本的に、約 1GB の巨大な解決済みコード ログを取得し、そのすべてが各行に上記の文字列で埋められています。
次の cdb コマンドを使用しています
cdb -z "abc.cab" -y "SymbolsPath" -G -logo "outputfile" -lines -c ".kframes 100;!analyze -v;!load msec.dll;!exploitable - v;vertarget;lmv;q"
ここで何が問題なのか、何か手がかりを持っている人はいますか?

4

1 に答える 1

1

-c コードを実行 する必要がある場合はcannot use -c and -G at the same time、最初のコマンドを読み取り、それに基づいて操作するために最初のブレークが必要です g; を使用します。
-c コマンドの最後に

また、何度もデバッグ対象が コマンドラインの最後にいる -c commands need to be provided first必要があります

cdb -c "<some cmd;someother cmd;g>" -z foo.cab

.load!loadサードパーティの拡張機能をロードするために使用しないでください

発行された文字列は、のどちらかまたはに"CvReg.........."関連しているようです。 SYMFLAG_NULLSYMFLAG_REGISTERFlags member of SYMBOLINFO Struct

サンプル トライアルは私のマシンでそのコード パスを通過しなかったため、吐き出す理由を見つけるには、破損した dmp または dmp ファイルに関する詳細情報が必要になる場合があります。

ダンプの作成

C:\>dir /b *.cab
File Not Found

C:\>cdb -c ".dump /ma /b foo.cab;q" calc | grep -i -E "dmp|dump|wr"
0:000> cdb: Reading initial command '.dump /ma /b foo.cab;q'
Creating C:\DOCUME~1\Admin\LOCALS~1\Temp\foo.cab.dmp - mini user dump
Dump successfully written
  Adding C:\DOCUME~1\Admin\LOCALS~1\Temp\foo.cab.dmp - added
Wrote foo.cab

C:\>dir /b *.cab
foo.cab

** debugees(cdb) debuggee (foo.cab) としてダンプをロードし、周りを見回す **

C:\>cdb cdb -z foo.cab

    0:000> s -u dbgeng l?39b000  "CvReg"
020341f8  0043 0076 0052 0065 0067 0054 006f 004d  C.v.R.e.g.T.o.M.

0:000> # *(*20341f8 dbgeng l?39b000
dbgeng!MachineInfo::CvRegToMachine+0xfe:
021bf8ae 68f8410302      push    offset dbgeng!`string' (020341f8)

0:000> # call*dbgeng!MachineInfo::CvRegToMachine dbgeng l?39b000
dbgeng!ImageInfo::CvRegToMachine+0x22:
021b62f2 e8b9940000      call    dbgeng!MachineInfo::CvRegToMachine (021bf7b0)

0:000> # call*CvRegToMachine dbgeng l?39b000
dbgeng!ImageInfo::CvRegToMachine+0x22:
021b62f2 e8b9940000      call    dbgeng!MachineInfo::CvRegToMachine (021bf7b0)
dbgeng!TypeInfoValueFromSymInfo+0x4b:
022541ab e82021f6ff      call    dbgeng!ImageInfo::CvRegToMachine (021b62d0)
dbgeng!TypedData::SetToSymbol+0x25f:
02285edf e8ec03f3ff      call    dbgeng!ImageInfo::CvRegToMachine (021b62d0)
dbgeng!TypedData::SetToSymbol+0x2da:
02285f5a e87103f3ff      call    dbgeng!ImageInfo::CvRegToMachine (021b62d0)
0:000> ln 0x21bf8ae


(021bf7b0)   dbgeng!MachineInfo::CvRegToMachine+0xfe   |  (021bf8d0)   dbgeng!Ma
chineInfo::GetContextState

この関数で uf を実行すると、SymbolInfo->Flags が
チェックされ、上記のサンプル ダンプがパスに入らないと判断された場所がチェックされます。

于 2014-05-26T23:04:57.133 に答える