Форум: "Основная";
Текущий архив: 2002.02.25;
Скачать: [xml.tar.bz2];
ВнизForm Designer without Delphi Найти похожие ветки
← →
Batiskaf (2002-02-08 19:41) [17]to Юрий Зотов.
{
Если мы хотим создать Delphi-образный редактор, то, похоже, другой возможности просто и нет. Поскольку, например, TObject в двух разных программах - это два разных класса. Значит, даже если удастся получить список классов из EXE или DLL, он окажется практически бесполезным - мы получим имена классов, но не сами классы.
}
Если вы имеете в виду что у процессов разделяемые адресные пространства, то это я вас уверяю не большая проблема - при помощи CreateRemoteThread я могу построить поток в другом процессе из своего процесса, как процедуру окна я даю адресс ф-ции LoadLibrary( ее прототип вполне подходит для процедуры потока: DWORD WINAPI ThreadFunc( LPVOID ) и HINSTANCE LoadLibrary (LPCTSTR lpLibFileName )), а параметром для нее я передаю имя своей длл - и вот я уже в данном процессе, в DllMain отстреливаю новый поток и как рыбка в воде. Единственная проблема(точнее две) - передав в CreateRemoteThread адрес ф-ции LoadLibrary мы передаем адрес ф-ции из нашего процеса в другой, а там такого адреса может и не быть. Единственное радует что это ф-ция системной библиотеки, так что Маунт Поинт системных длл-ей в двух процессах одинков а RVA експортируемой ф-ции соответственно тоже. По-этому стоит передавать в CreateRemoteThread не ф-цию-шлюз а истинную ф-цию LoadLibrary ( по-средством GetProcAddress ). И проблемма с параметром ф-ции нового потока - имя длл-ки нужно алоцировать тоже в адресном пространстве того процесса ( VirtualAllocEx).
С подгрузкой длл-к же таких вышеописанных проблем нет - адрессное пространство длл-и полностью принадлежит мне( точнее процессу моего "абстрактного" Форм Дизайнера).
Вопрос в другом - допустим что у меня в исследуемой Делфи длл определен класс TMyHrenZnamoForm ( имя этого класса я из рессурсов поднять могу - ObjectBinaryToText). И вот из своего процесса я хачу получить класс TClass этого типа. Насколько я почитал, VMT лежит в первом поле со смещением 4 байта от моего инстанса - но инстанса то у меня нет!!! Или может я чаво не понял - другими словами, как из имени класса получить его инстанс, причем класс определен в подключаемом модуле. Ведь для языков с динамическим связыванием это должно делаться как два байта переслать. Прашу прощения за столь прозрачные изречения - напрочь забыл Делфю, помнится все в общих чертах, но вы пишите код, пишите - я пойму :))
to Алексей Петров:
Насколько я помню, Борланд не придерживается Микрософтовского формата PE - они используют Intel OMF? А DumpBin кажется работает только с PE и COFF.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.02.25;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.004 c