Отладчик VS2008 и kernel32.dll - PullRequest
       12

Отладчик VS2008 и kernel32.dll

0 голосов
/ 03 декабря 2010

Я только что отлаживал процесс (в C ++ / windows), который использует «GetThreadContext», который находится в kernel32.dll.
Я заметил, что могу получить его адрес с

unsigned long address = (unsigned long)(&GetThreadContext);

но когда я посмотрел на вкладку загруженных модулей - я увидел, что символы для kernel32.dll не были загружены!
Как VS2008 узнал адрес «GetThreadContext»?
И как я могу сделать это сам, не имея PDB?
спасибо:)

1 Ответ

3 голосов
/ 03 декабря 2010

Это работает по той же причине, что

GetThreadContext(hThread, lpContext);

работает. Именованные функции, используемые в вашем коде, должны быть разрешены во время ссылки, иначе ссылка не будет выполнена. Неважно, берете ли вы их адрес с помощью & или звоните им. Во время выполнения DLL загружается, и имя функции затем разрешается в конкретный адрес в процессе.

Файлы PDB используются только для предоставления расширенной символической информации во время отладки. Обычно они не используются во время выполнения.

[Не могу не подумать, что что-то упустил из-за этого вопроса. Скажи мне, если это не твоя проблема.]

...