Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.29;
Скачать: CL | DM;

Вниз

можно ли как-либо отловить вызов 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)



Страницы: 1 вся ветка

Текущий архив: 2002.04.29;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
3-94306
Seri
2002-04-05 07:02
2002.04.29
Не полная(целая) строка в DBGrid


3-94340
hn
2002-04-09 17:25
2002.04.29
Семейство Tquery


1-94390
Ray_Parker
2002-04-14 15:09
2002.04.29
Вопрос по типу Double Word


1-94515
Lena Z
2002-04-16 16:42
2002.04.29
L470


1-94391
LazyCat
2002-04-17 17:38
2002.04.29
Подскажите, что я не так делаю...