Получить имя текущего модуля

Тема в разделе "WASM.BEGINNERS", создана пользователем 2FED, 9 июл 2008.

  1. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Нужно из длл узнать собственное имя, например:

    invoke GetModuleHandle,0
    invoke GetModuleFileName,eax,addr gbuf,100
    invoke MessageBox,0,addr gbuf,0,0

    выводит имя текущего процесса, а

    invoke GetModuleHandle,$CTA0('mydll.dll')
    ....

    выведет уже имя нашей dll, но чтобы получить имя надо его знать =( так что второй способ не катит.

    в общем как узнать ?
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    LdrFindEntryForAddress()
     
  3. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    2FED
    Первым параметром GetModuleFileName указать первый параметр DllMain.
     
  4. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    q_q Работает
    Clerk Полезная функция пригодится.

    всем спасибо
     
  5. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Ещё вылезла такая проблемма - прописал длл в реестре чтобы эксплорер её автоматически загружал ShellServiceObjectDelayLoad, в DllMain у меня стоит SetWindowsHookEx, всё нормально длл грузится во все процессы, но с целью функции обновления в реальном времени я написал функцию которая выгружает длл и через несколько секунд загружает заново, и тут уже длл не инжектится в остальные процессы, тоесть функция SetWindowsHookEx перестаёт работать, ещё такой же эффект наблюдается если проинжектить эксплорер вручную, тоесть
    VirtualAllocEx
    WriteProcessMemory
    CreateRemoteThread
     
  6. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Такая мысль - раз твоя длл уже загружена во все процессы, то пусть она сама грузит обновлённую версию, передаёт ей всё управление и выгружается.
     
  7. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Проблемма решилась переносом SetWindowsHookEx в отдельный поток инициализации. Но тут возникла другая проблемма :) При вызове UnhookWindowsHookEx бывает так что из одного или двух процессов хук не снимается, это как правило неактивные процессы, но стоит их пошевелить( пощёлкать мышкой и т.д.) как хук с них снимается, но это ведь не дело! Можно как нить стабильно снять хук? Мне ведь надо чтобы файл моей dll разблокировался чтобы заменить его на обновлённый а тут какойто процесс не хочет его выгружать =(