#kernel #symbols #windbg #dump #bsod
Вопрос:
Используя windbg, откройте файл дампа и запустите»! analyze-v», в результате будет указано свойство PROCESS_NAME, например, PROCESS_NAME: notmyfault64.exe.
Но как получить ИМЯ ПРОЦЕССА с помощью API отладки Windows?
Один из возможных способов-использовать IDebugClient::OpenDumpFile() для открытия файла дампа, а затем использовать IDebugControl::Execute() для выполнения»! analyse-v » и получения ИМЕНИ ПРОЦЕССА из выходных данных. Но это похоже на обходной путь.
Есть ли какой-либо прямой способ получить ИМЯ ПРОЦЕССА через API отладки? например, IDebugSymbols3::GetModuleNames()? Я попробовал такой код:
ULONG loaded = 0, unloaded = 0;
symbols->GetNumberModules(amp;loaded, amp;unloaded);
const ULONG count = loaded unloaded;
DEBUG_MODULE_PARAMETERS* parameters = new DEBUG_MODULE_PARAMETERS[count];
symbols->GetModuleParameters(loaded, 0, NULL, parameters);
for (int i = 0; i < count; i ) {
symbols->GetModuleNames(DEBUG_ANY_ID, parameters[i].Base, ImageNameBuffer, MAX_PATH 1, amp;ImageNameSize,
ModuleNameBuffer, MAX_PATH 1, amp;ModuleNameSize,
LoadedImageNameBuffer, MAX_PATH 1,
amp;LoadedImageNameSize);
std::cout << ImageNameBuffer<<", base level:"<<i << "n";
}
Но как решить, какой индекс или база должны быть для имени модуля?
А также здесь есть несколько примеров: https://medium.com/swlh/windows-debugger-api-the-end-of-versioned-structures-ac4acaa351bd , вопрос также в том, как выбрать правильное имя процесса, чтобы оно совпадало с результатом анализа Windbg?
И так до ИМЯ_ОБРАЗА и ИМЯ_МОДУЛЯ в результате анализа windbg, как получить их с помощью IDebugClient?
Спасибо!
Комментарии:
1. Вы смотрели/пробовали docs.microsoft.com/en-us/windows-hardware/drivers/ddi/dbgeng/… и в качестве альтернативы вы можете проверить _PEB docs.microsoft.com/en-us/windows-hardware/drivers/ddi/dbgeng/… Поэтому вам придется инициализировать и использовать COM-объект для IDebugSystemObjects2
2. Спасибо за предложение. Значение просто » srv*», когда я попробовал API GetCurrentProcessExecutableName (), что не является ожидаемым «notmyfault64.exe»