Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 144

/ вопрос открыт /

Приветствую, уважаемые эксперты!
Как программно выгрузить DLL из памяти?

Hideman Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Hideman (статус: Посетитель)
Вопрос отправлен: 2 сентября 2009, 07:42
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

Блин, уже стотыщмильённый раз говорю: прежде чем задать сюда вопрос, набери его в гугле!!! Первая же ссылка из запроса содержит готовый код!

function KillDll(aDllName: string): Boolean;
var
 hDLL: THandle;
 aName: array[0..10] of char;
 FoundDLL: Boolean;
begin
 StrPCopy(aName, aDllName);
 FoundDLL := False;
 repeat
   hDLL := GetModuleHandle(aName);
   if hDLL = 0 then
     Break;
   FoundDLL := True;
   FreeLibrary(hDLL);
 until False;
 if FoundDLL then
   MessageDlg('Success!', mtInformation, [mbOK], 0)
 else
   MessageDlg('DLL not found!', mtInformation, [mbOK], 0);
end;

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 2 сентября 2009, 08:34
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 11; последнее сообщение — 2 сентября 2009, 15:33; участников в обсуждении: 3.

2 сентября 2009, 08:29: Вопрос перемещён из тематического раздела Delphi » Прочее в раздел Delphi » Работа с компонентами и библиотеками модератором Ерёмин А.А.

Вадим К

Вадим К (статус: Академик), 2 сентября 2009, 11:08 [#1]:

Посмотрел на код. Что то мне кажется, что оно с содержит несколько ошибочек.
одна здесь
aName: array[0..10] of char;
я бы больше завел. как минимум 260. а то имя длл можно задать и длинее 10 символов (о нуле в конце не забываем).

А во вторых, если надо с своего приложения выгрузить длл, то достаточно вызвать ровно сколько же,сколько раз вызывался LoadLibrary (а он обычно один раз вызывается, кроме системных).
Эх... читать МСДН до полного просветления. обоим.
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 2 сентября 2009, 11:34 [#2]:

Цитата (Вадим К):


если надо с своего приложения выгрузить длл, то...


Это и ежу понятно, что где пишешь LoadLibrary(), там пиши и FreeLibrary(). По контексту более вероятно, что аффтар хочет выгружать чужие DLL. Для чего ему это надо, я не знаю.

Цитата (Вадим К):


Эх... читать МСДН до полного просветления. обоим.


Ты такой умный, Коля Вадик... (© реклама)
Я этот код не анализировал и вообще копипастить не хотел, но админ это делать заставляет и удаляет вопросы, где только ссылки на код, а самого кода нету, зато есть наставление на правильный алгоритм поиска в интернете.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Вадим К

Вадим К (статус: Академик), 2 сентября 2009, 11:49 [#3]:

Этот код не будет выгружать чужие длл. Если только не написать свою длл, которая будет подгружаться к каждой программе... а может как раз ему такое и надо выгружать? ну какой нибудь переводчик подгружается...

К тому же такой способ выгрузки, который в коде предлагается, плохой тем, что если это большая сложная программа, то какой то код попытается вызвать функцию с выгруженной длл, то будет плохо...
....
"мы ответственны за то, что копипастим". ведь не было предупреждений, что код непровереный, там написано же "готовый". Ну раз автор поставил положительную оценку, значит что то ему понравилось, может не испытал ещё... или не знает как...
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 2 сентября 2009, 12:05 [#4]:

Цитата (Вадим К):


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


Готовый - это значит, что он там есть. То, что он непроверенный - это и так ясно, не буду же я каждый кусок кода проверять. И копипастить я не хочу, плодить одинаковый код по всему инету смысла нет, достаточно ссылки. Одмин считает иначе.
Я несу ответственность только за тот код, который написал сам.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Hideman

Hideman (статус: Посетитель), 2 сентября 2009, 12:35 [#5]:

Это нужно мне чтобы выгрузить dll вирусы!
Hideman

Hideman (статус: Посетитель), 2 сентября 2009, 12:38 [#6]:

Такое возможно?
Hideman

Hideman (статус: Посетитель), 2 сентября 2009, 12:40 [#7]:

Еще я не использовал этот код! Если ест какие ни будь ошибки помогите исправит пожалуйста!
Вадим К

Вадим К (статус: Академик), 2 сентября 2009, 12:41 [#8]:

Антивирусами надо пользоваться. А этот код не поможет, это точно.
"dll вирусы".... только глупые-глупые можно ещё как то с юзермода удалить, а остальные умеют хорошо сопротивляться.
Так что этот "не очень хороший код", в данном случае никак не поможет. впрочем, и в других проектах я бы не рекомендовал его использовать.
Галочка "подтверждения прочтения" - вселенское зло.
Hideman

Hideman (статус: Посетитель), 2 сентября 2009, 12:43 [#9]:

А какие нужно использовать? Если какой ни будь кодик!
Вадим К

Вадим К (статус: Академик), 2 сентября 2009, 13:07 [#10]:

Антивирусами надо пользоваться и фаерволами и не ходить по непроверенным сайтам легкого содержания.
Я думаю, что тут простым дефловским кодом не обойдешься. А если и получиться, то он будет выходить далеко за пределы обычного прикладного программирования.

Неверной дорогой идете:)
Надо не длл выгружать, а искать того, кто ее загружает. Думаете разработчики вируса не защитили его?
Галочка "подтверждения прочтения" - вселенское зло.
Hideman

Hideman (статус: Посетитель), 2 сентября 2009, 15:33 [#11]:

to Вадим
Вот текст autorun.inf который использует вирус!
Что Вы думаете какая прога здесь загружает вирус?

[autorun]
open=
shell\open=Explore
shell\open\Command=rundll32.exe .\desktop.dll,InstallM
shell\open\Default=1

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:55
Выполнено за 0.03 сек.