Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.19;
Скачать: CL | DM;

Вниз

своя GetModuleHandle   Найти похожие ветки 

 
AlexRush ©   (2003-03-18 13:25) [0]

Доброго времени суток, господа мастера.
Я написал аналог GetProcAddress. (как обычно, получает хендл модуля и имя ф-и и возвращает ее адрес)
Теперь очередь GetModuleHandle. Как мне без вызовов API (читая лищь память своего процесса) получить хендл загруженного модуля по его имени. Я так предполагаю, копать следует в сторону Базы данных процесса. Есть существенная поправка - код должен работать как под NT, так и под 9x.
Если кто-то занимался даной проблемой, рад выслушать предложения или готовый код.
Спасибо.


 
Игорь Шевченко ©   (2003-03-18 14:55) [1]

Под NT:
__try {
_LIST_ENTRY** pInLoadOrderModuleList;
_LDR_DATA_TABLE_ENTRY* pModule;
__TEB* Teb = GetTEB();

pInLoadOrderModuleList = & GetTEB()->ProcessEnvironmentBlock->Ldr->InLoadOrderModuleList;
for (pModule = (_LDR_DATA_TABLE_ENTRY*)(*pInLoadOrderModuleList);
(_LIST_ENTRY**)pModule != pInLoadOrderModuleList;
pModule = (_LDR_DATA_TABLE_ENTRY*)(Work->InLoadOrderLinks.Flink))
if (pModule->DllBase == DllBase) {
register UNICODE_STRING* pusModuleName = & pModule->FullDllName;
result = min(size * sizeof(wchar), pusModuleName->Length + sizeof(wchar));
__try {
memmove (lpszFileName, pusModuleName->Buffer, result);
if (result != pusModuleName->Length + sizeof(wchar))
result = pusModuleName->Length;
}
__except (__GetModuleFileNameWExceptionFilter()) {
__BaseSetLastNTError (
GetExceptionInformation()->ExceptionRecord.ExceptionCode);
// ___local_unwind2 (...standard exception processing)
result = 0;
}
}
}


 
AlexRush ©   (2003-03-18 16:06) [2]

Игорь Шевченко >>
Прошу прощения за возможный ламеризм, но где взять определение
структур
_LDR_DATA_TABLE_ENTRY
__TEB
и ф-и
GetTEB() ?


 
nikkie ©   (2003-03-18 17:24) [3]

>Я написал аналог GetProcAddress. ... Теперь очередь GetModuleHandle.
удовлетворите любопытство - зачем?


 
AlexRush ©   (2003-03-19 18:28) [4]

nikkie >> Из любви к искусству (обход перехвата вызовов API).

аналог GetModuleHandle для NT я уже написал, под 9х столкнулся с интересной особенностью - код kernel32 местами недоступен для чтения (именно ее хендл мне и нужен).
Так что теперь проблема локализуется до 9х-Me.



Страницы: 1 вся ветка

Текущий архив: 2003.05.19;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.016 c
14-59853
fighter@str
2003-05-01 12:07
2003.05.19
PWL


7-59968
SaperXL
2003-03-23 11:12
2003.05.19
разрешение принтера


1-59721
xxxCrazyManxxx
2003-05-05 22:25
2003.05.19
как округлить число


3-59540
gala
2003-04-29 11:38
2003.05.19
работа с БД


3-59571
Jakommo
2003-04-27 14:30
2003.05.19
UML модель приложения на BoldSoft.