【问题标题】:cdb/windbg output too largecdb/windbg 输出太大
【发布时间】:2014-05-26 11:58:47
【问题描述】:

我们正在使用 cdb(winDBG 的命令行版本)来解析 cab。 为了在文件中获取输出,我们使用 -logo 输出来指定输出文件。 对于某辆出租车,我们收到“CvRegToMachine(x86) 0x7536 转换失败”超过一百万次。
基本上我们得到了一个巨大的解析代码日志,将近 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"
有没有人知道这里可能出了什么问题?

【问题讨论】:

  • 您是否已验证您使用的 cdb 版本是否适用于转储文件来自的处理器架构?
  • 是的。它适用于其他出租车

标签: windbg windows-error-reporting


【解决方案1】:

cannot use -c and -G at the same time -c 需要第一次休息才能阅读初始
如果您需要运行代码,请使用 g; 命令并对其进行操作在 -c 命令的末尾

也多次-c commands need to be provided first和被调试者需要
在命令行的末尾

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

.load 而不是!load 应该用于加载第三方扩展

"CvReg.........." 发出的字符串似乎与 Flags member of SYMBOLINFO Struct 中的 SYMFLAG_NULLSYMFLAG_REGISTER 相关。

一个示例试验没有跨越我机器中的代码路径,因此可能需要损坏的 dmp 或有关 dmp 文件的更多信息来查找 spew 的原因

创建转储

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 的位置
检查并确定我上面的示例转储没有进入路径

【讨论】:

  • 谢谢@blabb。我认为正在处理的出租车已损坏。但是我想知道如果它是由 SYMFLAG_NULL 引起的某种无限循环,会导致处理结束的原因。我忘了提一下,我为不同损坏的出租车得到了不同的尺寸,而且我在处理时没有内存不足。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
  • 2017-04-29
相关资源
最近更新 更多