Добрый день. Exe из ресурсов выбрасывает dll и запускает из нее функцию (которая шлет письмо серез SMTP). Дальше хочу удалить эту dll из Exe - родителя. Подскажите как правильно это сделать для XP\Vista ... Спасибо.
то есть ... main { LoadLibrary() GetProcAddress() call mydll.myfun() CreateThread(... _fun_del_dll()...) } _fun_del_dll() { FreeLibrary() DeleteFile() } ... так?
да.. но если вы делаете несколько раз LoadLibrary? то вам прийдется и несколько раз делать FreeLibrary черновой вариант так repeat i:=GetModuleHandle; FreeLibrary(i); until i<>0 сори за поскаль)
ла = да? а i:=GetModuleHandle; - выполнять где? - в Exe - в mydll - в _fun_del_dll() то есть на выходе GetModuleHandle() я получу чей Handle ?
lapslap то есть так, я правильно понял ... main { ... LoadLibrary() GetProcAddress() call mydll.myfun() CreateThread(... _fun_del_dll()...) } _fun_del_dll() { repeat FreeLibrary(GetModuleHandle(mydll)); until i<>0 DeleteFile() } ... так?
_sheva740 Давайте сразу определимся. Если нужно удалить отдельный файл, то: hLibrary=LoadLirary() - тут мы сохраняем хэндл а при удалении FreeLibrary(hLibrary) DeleteFile(szLibraryName) --------------- А если нужно удалить длл непосредственно из файла ехе, т.е. зачистить ресурсы, то тут способ несколько иной. Необходимо создать новый процесс (не поток!) и закрыть целевой. С нового процесса отредактировать файл.
rain да вот Код (Text): ... _sma db 'sma.dll',0 _smail db 'smail',0 dwDamnStuff dd 0 INFINITE = 0FFFFFFFFh ;************************************************************************ start: ... push _sma ; Загружаем библиотеку call [LoadLibrary] ; которую мы извлекли test eax,eax ; Выходим в je exit ; случае ошибки mov [dwDamnStuff],eax push _smail ; push eax ; Ищем функцию call [GetProcAddress] ; '_smail' test eax,eax ; Выходим в je exit ; случае ошибки call eax ; вызываем эту функцию invoke CreateThread, 0, 0, clsmadll, 0, 0, 0 push eax invoke WaitForSingleObject, eax, INFINITE ;************************************************************************ proc clsmadll @@: push dwDamnStuff ; Выгружаем библиотеку call [FreeLibrary] ; которую мы извлекли invoke GetModuleHandle,_sma test eax,eax jne @B push _sma ; Удалим существующий call [DeleteFile] ; файл если он есть ret endp После запуска этой exe - ки sma.dll не удаляется
Учитесь задавать вопросы нормально, уважайте своё время и других, если бы ты сказал какая именно функция и где бочинит я бы потратил времени меньше, короче вот пример работает нормально проверяй, сверяё что у тебя не так Download-Link #1: http://rapidshare.com/files/85993450/Projects.zip.html Delete-Link #1: http://rapidshare.com/files/85993450/Projects.zip?killcode=17012653788414623040