DllMain - как найти её разбирая dll

Тема в разделе "WASM.BEGINNERS", создана пользователем vovka, 22 июн 2006.

  1. vovka

    vovka New Member

    Публикаций:
    0
    Регистрация:
    23 май 2006
    Сообщения:
    45
    как найти адрес DllMain в Dll файле?



    импорт разобрал, экспорт тоже а вот саму DllMain немогу

    найти как её искать:)



    AddressOfEntryPoint не то



    Спасибо
     
  2. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Читай статьи Рустэма
     
  3. vovka

    vovka New Member

    Публикаций:
    0
    Регистрация:
    23 май 2006
    Сообщения:
    45
    google на Рустэм PE Dll ничего не дал



    как его найти



    всё что я мог найти я прочитал, но найти DllMain не могу!
     
  4. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Васм рулит!
     
  5. vovka

    vovka New Member

    Публикаций:
    0
    Регистрация:
    23 май 2006
    Сообщения:
    45
    ??

    Я серьёзно!

    Я все заголовки разобрал, но ни в AddressOfEntryPoint ни

    в DLLCharachteristics нет



    дайте ссылку

    или ткните куда копать



    Спасибо!
     
  6. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    EntryPoint она и есть.
     
  7. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    А на чём DLL написана? AddressOfEntryPoint может быть адресом ф-ции RTL, которя уже вызывает твою DllMain.

    Так, для VC это DllMainCRTStartup.



    Кстати DLL может и вовсе не иметь точки входа.

    Типичный случай - resource only dll.
     
  8. vovka

    vovka New Member

    Публикаций:
    0
    Регистрация:
    23 май 2006
    Сообщения:
    45
    Написал я свою маленькую DLL, вернее создал в VS2003!

    Только Одна DllMain!

    Когда делаю LoadLibrary! все ок!

    т.е. DLL правильная!

    Но найти аддресс DllMain не могу!
     
  9. P_F

    P_F New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2006
    Сообщения:
    116
    Адрес:
    Russia
  10. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    2 Roustem:

    Слава богу ты не видел этого поста во вторник утром :)))

    Иначе бы я не знаю, чтобы ты написал подвоздействием того, чем я угощал в понедельник когда защитил дипломный проект :)))
     
  11. P_F

    P_F New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2006
    Сообщения:
    116
    Адрес:
    Russia
    2 EvilsInterrupt:

    2 Roustem:???



    2 vovka:

    А нафига вообще тебе DLL Main если не секрет? А то может можно и проще...



    Кстати не знаю на сколько поможет Roustem, а вот на васме точно где то были очень хорошие доки по PE для exe и dll.
     
  12. P_F

    P_F New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2006
    Сообщения:
    116
    Адрес:
    Russia
  13. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    EvilsInterrupt

    Поздравляю с защитой. Какоя тема диплома?
     
  14. vovka

    vovka New Member

    Публикаций:
    0
    Регистрация:
    23 май 2006
    Сообщения:
    45
    P_F

    Вот разобрал весь DLL, а вот как найти DllMain не знаю!

    Я смотрю вопрос тяжёлый, т.к. никто внятно не ответил, да и в доках я ничего не нашёл! Но ведь такого не может быть!!!
     
  15. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    vovka

    Тебе green уже ответил.

    Если ты пишешь dll "ручками" на асме (или в кодах а ля Roustem), то твоя DllMain - "настоящая" и располагается по AddressOfEntryPoint

    А вот во всяких ЯВУ добрые дяди из MS, Borland и т.п. пишут настоящую навороченную DllMain сами, а твоя DllMain - это лишь дополнительная пользовательская функция, которая вызывается из главной функции, автоматически создаваемой компилятором. Поэтому где находится именно твоя функция - зависит от компилятора. Поставь в начало int3 и посмотри в отладчике
     
  16. vovka

    vovka New Member

    Публикаций:
    0
    Регистрация:
    23 май 2006
    Сообщения:
    45
    leo

    я в отладчике видел!! Но найти не мог!

    Так всё-таки есть какие-то идеи как её найти, т.е.

    мою DllMain? Я в VS2003! Но ничего про этот механизм не сдышал!?



    и всё-таки!
     
  17. vovka

    vovka New Member

    Публикаций:
    0
    Регистрация:
    23 май 2006
    Сообщения:
    45
    leo

    кстати в ida открывал свою dll, там явно и красиво

    показано где начинается код DllMain!!!



    прямо ужас какой-то!
     
  18. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    vovka

    > "явно и красиво показано где начинается код DllMain!!!"

    Ну и где же он "начинается" ?

    В загруженном образе адресу DllMain негде быть кроме как в ImageBase+AddressOfEntryPoint. Вот только ImageBase ес-но может не соответствовать значению в PE-заголовке, т.к. dll м.б. загружена по другому базовому адресу.

    Ну а в файле соответсвенно AddressOfEntryPoint - code.VirtualAddress + code.PointerToRawData



    Это касается адреса "настоящей" DllMain с точки зрения винды. А чего там ЯВУ-компиляторы могут замутить это другой вопрос. Например дельфи использует свою DllMain, в которой при DLL_PROCESS_ATTACH выполняет инициализию всех юнитов (секции initialization), а юзверю вместо виндового прототипа DllMain предлагает использовать свой прототип DllProc с единственным параметром Reason. Соответсвенно эта DllProc вызывается откуда-то из недр основной DllMain