Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.29;
Скачать: [xml.tar.bz2];




Вниз

можно ли как-либо отловить вызов dll в коде? 


Starkom   (2002-04-17 12:26) [0]

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



Alx2   (2002-04-17 12:37) [1]

Некоторые dll можно еще до запуска узнать из таблицы импорта.
Про остальные IMHO перехват API вызовов LoadLibrary, LoadLibraryEx. А это надо?



Starkom   (2002-04-17 12:45) [2]

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



Digitman   (2002-04-17 13:11) [3]

А не намудрил ли ты ?
Пусть твой хост-процесс грузит обе DLL (имена ж их и требуемые точки входа известны тебе) и вызывает их в сколь угодно сложном порядке в любых нужных потоках !



Starkom   (2002-04-17 13:18) [4]

в том то и дело, что одна dll"ка стороннего разработчика без исходных текстов. Как она устроена, я понятия не имею. Знаю только, что она вызывает функцию из dll"ки, написанной мной. Как раз и надо получить управление до вызова этой функции. Можно, конечно, делать это из самой функции, но тогда, как получить доступ к данным самого приложения?



Alx2   (2002-04-17 13:41) [5]

> как получить доступ к данным самого приложения?
Так получается, что адресное пространство едино и до всех данных своего приложения можно достучаться. Особливо, если структура известна.
Потом: почему именно до вызова своей функции? На первый взгляд все едино: что до вызова, что обработать то же самое в начале выполнения функции.



Digitman   (2002-04-17 13:49) [6]

Все равно непонятно, что значит "получить управление"...
Если твою ф-цию в твоей же DLL кто-то вызывает, это вполне можно считать ситуацией, когда ты получил управление.



Starkom   (2002-04-17 14:18) [7]

2 Alx2: а как достучаться?
есть form1 на буттон1клик создаем
Thread:=TFormExecutor.Create(false);
в TFormExecutor.Execute вызываем внешнюю dll"ку - она потом вызывает мою dll"ку. Так в моей dll"ке Form1=nil!
я просто не въезжаю, как получить доступ к данным приложения.



Виктор Щербаков   (2002-04-17 14:25) [8]


> я просто не въезжаю, как получить доступ к данным приложения

Положи их в проецированный файл. Если уж до конца извращаться, то туда можно положить адрес некоторой функции твоего хост-приложения, а длл, при получении управления будет вызывать эту функцию.



Starkom   (2002-04-17 14:27) [9]

2 Виктор Щербаков:
:)) проще уж приложение COM-server"ом сделать. А при вызове функции из dll создавать клиент.



Alx2   (2002-04-17 14:27) [10]

>Starkom (17.04.02 14:18)
Опиши подробнее задачу. С трудом допираю. Почему Form1 не должна быть nil. Проблема в том, чтобы наблюдать Form1 у хоста?



Starkom   (2002-04-17 14:31) [11]

2 Виктор Щербаков:
:)) проще уж приложение COM-server"ом сделать. А при вызове функции из dll создавать клиент.



Digitman   (2002-04-17 14:40) [12]

Можно, TCKB E; YF NJ GJIKJ? "поизвращаться" и куда более изощреннее)

Всякая Делфи-форма, существующая в run-time, имеет свое окно.
В процессе конструирования формы создаваемое окно получает уникальное св-во (с именем создаваемогого конструктором формы спец-но для этой цели глоб.атома), значение которого равно адресу экз-ра формы в памяти приложения (иными словами - копии того, что содержится в той самой переменной Form1 у автора). Дело за малым : найти любым удобным и доступным способом хэндл окна формы, получить хэндл глолб.атома, получить зн-е св-ва окна и привести его к известному заранее типу - классу целевой формы.

Подробности - в модуле controls.pas,
см. все, что связано с "магическим" объявлением в этом модуле :

var
WindowAtom: TAtom;
ControlAtom: TAtom;



Digitman   (2002-04-17 14:53) [13]

В дополнение :

Замечательную, кстати, "дыру" Борланд оставляет для желающих "поистязать" чужие приложения, написанные в Делфи)
При определенном желании и упорстве можно получить ПОЛНЫЙ контроль над объектом Application, "живущим" в АП "чужого" процесса, стартовавшего из EXE, сверстанного в Делфи и использующего объект TApplication)




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.29;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.018 c
1-94371           ymin                  2002-04-15 15:40  2002.04.29  
как сделать всплывающую подсказку


1-94475           eSKey                 2002-04-15 17:39  2002.04.29  
И еще раз о хранении пароля


1-94439           ДмитрийВ              2002-04-15 20:57  2002.04.29  
print


3-94338           Zak                   2002-04-09 13:08  2002.04.29  
Как считать с базы текст размером 1М.


4-94639           Grim Rider            2002-02-20 13:20  2002.04.29  
Hook