Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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)



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

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

Наверх




Память: 0.47 MB
Время: 0.005 c
3-94263
Rail
2002-04-07 16:05
2002.04.29
Как показать последнюю ошибу при работе с БД через BDE


3-94324
Uncle SAM
2002-04-02 01:47
2002.04.29
SPLIT


14-94549
Nest
2002-03-21 14:42
2002.04.29
Как сделать недоступными некоторые items в TListBox? Или есть другой компонент с такой фичей?


14-94563
Delphinchik
2002-03-23 21:42
2002.04.29
Обламаем NT-ю


1-94369
kull
2002-04-17 12:21
2002.04.29
Имя метода или функции





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский