Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2012, 13:20   #21
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

А что есть t : string; ???

Анси - строка ? Че-то у меня сомнения.
EUGY вне форума Ответить с цитированием
Старый 05.05.2012, 13:31   #22
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

сомнения по поводу? Вы о чем?
t : string, в которой содержится полный путь к внедряемой DLL.
Сейчас попробовал сделать t : ansistring, но не помогло.
BLACK_RAIN вне форума Ответить с цитированием
Старый 05.05.2012, 13:46   #23
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Плохо знаю делфи, что там за типы данных. Поэтому не могу сказать.
Может кто подскажет. Должен быть классический массив char завершаемый нуль-терминатором, а не класс.
Ну так, отследили возвращаемые значения всех функций?
Саму длл потестили на загрузку из своего процесса?
EUGY вне форума Ответить с цитированием
Старый 05.05.2012, 14:13   #24
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
Должен быть классический массив char завершаемый нуль-терминатором
вы оказались правы!!!!!
надо было просто заменить @t на pchar(t) и пошла мазута!
но появился второй вопрос.
как теперь выгрузить эту DLL из процесса, ведь она там осталась?
повторная ее компиляция говорит, что файл занят другим процессом.
и что писать в процедуре DllFin ?
BLACK_RAIN вне форума Ответить с цитированием
Старый 05.05.2012, 14:15   #25
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Плохо знаю делфи, что там за типы данных. Поэтому не могу сказать.
Может кто подскажет. Должен быть классический массив char завершаемый нуль-терминатором, а не класс.
Есть такое. Обычно для API в делфи PChar используют.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 05.05.2012, 14:51   #26
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

DiemonStar, спасибо, буду знать.

Цитата:
как теперь выгрузить эту DLL из процесса, ведь она там осталась?
Продолжим "лохматить бабушку".

VirtualFreeEx // освободим выделенный блок

Потом также как получали LoadLibrary, получим адрес Freelibrary.

И надо бы получить хендл модуля загруженной длл. Можно через CreateToolhelp32Snapshot.
Или может через EnumProcessModules? Фиг его знает, что удобнее.

И вот точно также:
CreateRemoteThread(hProcess, NULL, 0, addressFreeLibrary, dllHandle, 0, NULL);

Разумеется, не забываем закрывать хендлы удаленных потоков и открытого процесса
CloseHandle.


ps
Цитата:
и что писать в процедуре DllFin
Да что угодно.
Чужой процесс весь в Вашем распоряжении, например сабклассируйте окна, а при DLL_PROCESS_DETACH, снимайте сабклассинг.

Последний раз редактировалось EUGY; 05.05.2012 в 14:57.
EUGY вне форума Ответить с цитированием
Старый 05.05.2012, 16:40   #27
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
EnumProcessModules
он возвращает полный путь к процессу. А из названия видно, что должен вернуть список модулей
чё за хрень?
BLACK_RAIN вне форума Ответить с цитированием
Старый 05.05.2012, 18:12   #28
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Библиотека знает какой код должна выполнить и когда надобность в ней пропадет, знает свой хендл, так пусть сама себя и выгрузит. Переход на FreeLibrary выполнить командой jmp переложив аргументы в стеке таким образом, чтобы управление из функции вернулось в предыдущую функцию минуя адресное пространство в котором расположен код библиотеки т.к. на момент выхода из функции данное адресное пространство уже будет освобождено.
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 05.05.2012, 18:40   #29
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
И надо бы получить хендл модуля загруженной длл. Можно через CreateToolhelp32Snapshot.
Или может через EnumProcessModules? Фиг его знает, что удобнее.

И вот точно также:
CreateRemoteThread(hProcess, NULL, 0, addressFreeLibrary, dllHandle, 0, NULL);
даже если я получу список модулей, то как я узнаю, какой из хэндлов принадлежит именно моей DLL? С чем их сравнивать при переборе? Больше конкретики, пжлста.
BLACK_RAIN вне форума Ответить с цитированием
Старый 05.05.2012, 19:43   #30
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Да прочитай ты уже про эти функции они помимо хендлов много информации возвращают. То что ты делаешь не самообучением называется, а наглым попрошайничеством.
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таймер SetTimer и глюки с ним Jugger Win Api 2 09.03.2012 20:21
Settimer в winx64 не работает, рушит Excel?! budda999 Microsoft Office Excel 9 07.01.2012 13:43
Отследить изменение курсора в чужих окнах Lime Общие вопросы Delphi 2 02.07.2009 19:17
SetTimer, KillTimer NeiL Win Api 5 05.03.2008 07:37