Мы используем cdb (версия winDBG для командной строки) для разрешения файла cab. Для получения вывода в файл мы используем вывод -logo для указания выходного файла. Для определенного CAB мы получаем "CvRegToMachine(x86) сбой преобразования для 0x7536" более миллиона раз.
По сути, мы получаем огромный журнал разрешенного кода, почти 1 ГБ, и он полностью заполнен. с приведенной выше строкой в каждой строке.
Мы используем следующую команду 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 слишком велик
Ответы (1)
вам cannot use -c and -G at the same time
-c нужен первый break, чтобы прочитать начальную команду
и действовать в соответствии с ней, если вам нужно запустить код use g; в конце команды -c
также много раз -c commands need to be provided first
и отлаживаемый объект должен
быть в конце командной строки
cdb -c "<some cmd;someother cmd;g>" -z foo.cab
.load
не !load
следует использовать для загрузки сторонних расширений
строка, испускаемая "CvReg.........."
, кажется, связана либо с SYMFLAG_NULL
, либо с SYMFLAG_REGISTER
в Flags 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
** загрузка дампа как отладочная программа (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
проверяется и решает, что мой пример дампа выше не входит в путь