как найти адрес DllMain в Dll файле? импорт разобрал, экспорт тоже а вот саму DllMain немогу найти как её искать AddressOfEntryPoint не то Спасибо
google на Рустэм PE Dll ничего не дал как его найти всё что я мог найти я прочитал, но найти DllMain не могу!
?? Я серьёзно! Я все заголовки разобрал, но ни в AddressOfEntryPoint ни в DLLCharachteristics нет дайте ссылку или ткните куда копать Спасибо!
А на чём DLL написана? AddressOfEntryPoint может быть адресом ф-ции RTL, которя уже вызывает твою DllMain. Так, для VC это DllMainCRTStartup. Кстати DLL может и вовсе не иметь точки входа. Типичный случай - resource only dll.
Написал я свою маленькую DLL, вернее создал в VS2003! Только Одна DllMain! Когда делаю LoadLibrary! все ок! т.е. DLL правильная! Но найти аддресс DllMain не могу!
google на Рустэм PE Dll ничего не дал как его найти Рустэм == Roustem Dll in binary [Roustem] ==Roustem - Dll в машинных кодах.
2 Roustem: Слава богу ты не видел этого поста во вторник утром )) Иначе бы я не знаю, чтобы ты написал подвоздействием того, чем я угощал в понедельник когда защитил дипломный проект ))
2 EvilsInterrupt: 2 Roustem:??? 2 vovka: А нафига вообще тебе DLL Main если не секрет? А то может можно и проще... Кстати не знаю на сколько поможет Roustem, а вот на васме точно где то были очень хорошие доки по PE для exe и dll.
P_F Вот разобрал весь DLL, а вот как найти DllMain не знаю! Я смотрю вопрос тяжёлый, т.к. никто внятно не ответил, да и в доках я ничего не нашёл! Но ведь такого не может быть!!!
vovka Тебе green уже ответил. Если ты пишешь dll "ручками" на асме (или в кодах а ля Roustem), то твоя DllMain - "настоящая" и располагается по AddressOfEntryPoint А вот во всяких ЯВУ добрые дяди из MS, Borland и т.п. пишут настоящую навороченную DllMain сами, а твоя DllMain - это лишь дополнительная пользовательская функция, которая вызывается из главной функции, автоматически создаваемой компилятором. Поэтому где находится именно твоя функция - зависит от компилятора. Поставь в начало int3 и посмотри в отладчике
leo я в отладчике видел!! Но найти не мог! Так всё-таки есть какие-то идеи как её найти, т.е. мою DllMain? Я в VS2003! Но ничего про этот механизм не сдышал!? и всё-таки!
leo кстати в ida открывал свою dll, там явно и красиво показано где начинается код DllMain!!! прямо ужас какой-то!
vovka > "явно и красиво показано где начинается код DllMain!!!" Ну и где же он "начинается" ? В загруженном образе адресу DllMain негде быть кроме как в ImageBase+AddressOfEntryPoint. Вот только ImageBase ес-но может не соответствовать значению в PE-заголовке, т.к. dll м.б. загружена по другому базовому адресу. Ну а в файле соответсвенно AddressOfEntryPoint - code.VirtualAddress + code.PointerToRawData Это касается адреса "настоящей" DllMain с точки зрения винды. А чего там ЯВУ-компиляторы могут замутить это другой вопрос. Например дельфи использует свою DllMain, в которой при DLL_PROCESS_ATTACH выполняет инициализию всех юнитов (секции initialization), а юзверю вместо виндового прототипа DllMain предлагает использовать свой прототип DllProc с единственным параметром Reason. Соответсвенно эта DllProc вызывается откуда-то из недр основной DllMain