2010-12-03 8 views
0

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

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

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

+2

GetProcAddr (http://msdn.microsoft.com/en-gb/library/64tkc9y5%28v=VS.80%29.aspx) может быть? Я никогда не использовал его, поэтому я не совсем уверен в этом. – BlackBear 2010-12-03 19:57:09

+0

Хорошо, спасибо ... :) – Idov 2010-12-03 20:11:26

ответ

3

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

GetThreadContext(hThread, lpContext); 

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^