Как использовать SymLoadModuleEx для загрузки файла PDB?

Я пытаюсь вызвать SymLoadModuleEx , чтобы загрузить символы из файла PDB, а затем использовать SymFromAddr , чтобы искать символы в этой PDB. Однако я не могу понять, что передать для параметров BaseOfDll и DllSize - в документации прямо сказано, что при загрузке файла PDB эти параметры не могут быть 0, и действительно попытка передать 0 приводит к сбою с ERROR_INVALID_PARAMETER .

Вот как выглядит мой код:

SymSetOptions(SYMOPT_LOAD_LINES);
HANDLE hprocess = GetCurrentProcess();
if (!SymInitialize(hprocess, NULL, FALSE))
    die("SymInitialize");

if(SymLoadModuleEx(hprocess, NULL, "full path to some PDB file.pdb", NULL,
                   0,  // What to pass here?
                   0,  // What to pass here?
                   NULL, 0) == 0)
{
    die("SymLoadModuleEx");
}

Как узнать, что BaseOfDll и DllSize передать при загрузке файла PDB? Рассматриваемый файл PDB является символьным файлом для другого исполняемого файла программы (не DLL), и просто ради аргумента предположим, что у вас нет доступа к исходному EXE, из которого был сгенерирован PDB.

В качестве альтернативы, есть ли лучший метод поиска символов, соответствующих заданному адресу, из файла PDB?

8
задан Adam Rosenfield 1 February 2011 в 19:39
поделиться