dlltools переводит dll в pas

Вопросы использования сторонних (не входящих в состав FPC и Lazarus) утилит и библиотек.

Модератор: Модераторы

dlltools переводит dll в pas

Сообщение Attid » 21.06.2007 13:06:57

кто нибуть юзал сие чудо ?
http://www.basegraph.com/bg/tutorials/e ... tools.html
а может кто-то хочет и не знает =)
правда под дельфю изначально но думаю перевести можно.
суть программы в том чтобы перевести dll в пасовский файл который можно потом использовать в проэкте и не таскать вместе с приложением доп бублиатеки.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение Иван Шихалев » 21.06.2007 15:34:52

И что, работает?
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Сообщение Replicator » 21.06.2007 18:20:39

Интересно, каков принцип действия?

Мне приходит на ум только закодировать dll в base64 (ну или как-нибудь иначе - неважно), и присвоить это огромное значение строке. А при запуске приложения сохранить значение строки в файл с расширением dll и работать с ним.

Но это такое извращение... Кстати, раньше я тоже был сторонником делать все приложение одним файлом. Но это прошло. Так что мой совет: научитесь пользоваться утилитами для создания установочных файлов, InnoSetup - отличная штука.
Replicator
постоялец
 
Сообщения: 154
Зарегистрирован: 30.04.2006 17:14:45
Откуда: Outer Heaven

Сообщение Attid » 21.06.2007 18:30:00

а посмотреть ?

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

эт по памяти когда давно с ней игрался, сейчас под вайном лениво запускать чтоб проверить =)
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение ev » 21.06.2007 18:59:13

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

сейчас это стало распространенным трюком для троянов
поэтому многие файрволы начинают пищать :(
пока насколько я знаю остался еще один метод (по крайней мере агнитум не ругается)
но опять - все это только под винды ;)
ev
долгожитель
 
Сообщения: 1772
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Сообщение shade » 22.06.2007 13:41:03

Прочитал,.. хм.. а мне показалось что речь идет о переводе модулей (юнитов) импорта dll из динамического в статический и обратно.

Динамический это когда LoadLibrary/GetProcAddress, а статический это когда через external dllname name 'procname'...

Отсюда вопрос:
Откуда идет мода на динамические модули импорта?
Вот открываю src\fpc\packages\extra\opengl\gl.pas и вижу:
Код: Выделить всё
  FreeOpenGL;

  LibGL := LoadLibrary(PChar(dll));
  if LibGL = 0 then raise Exception.Create('Could not load OpenGL from ' + dll);
  try
    @glAccum := GetGLProcAddress(LibGL, 'glAccum');
    @glAlphaFunc := GetGLProcAddress(LibGL, 'glAlphaFunc');
    @glAreTexturesResident := GetGLProcAddress(LibGL, 'glAreTexturesResident');
    @glArrayElement := GetGLProcAddress(LibGL, 'glArrayElement');
    @glBegin := GetGLProcAddress(LibGL, 'glBegin');
    @glBindTexture := GetGLProcAddress(LibGL, 'glBindTexture');
.....


Не пойму, что так быстрее вызов происходит?..
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение Юра » 22.06.2007 15:02:48

shade писал(а):Отсюда вопрос:
Откуда идет мода на динамические модули импорта?


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

При динамическом импорте можно проверить наличие этой длл (или какой-то функции, которая есть только в новой версии длл) и не пользоваться ее возможностями если ее нет (и если такое предусмотрено программой).

Очень часто динамический импорт используется для длл, которые есть только в NT, чтобы программа успешно запускалось на 9х, где таких длл нет вообще.
Юра
постоялец
 
Сообщения: 163
Зарегистрирован: 25.05.2005 10:20:09
Откуда: Украина, Киев

Сообщение shade » 22.06.2007 19:02:21

Ну если программа зависит от некоторой dll, то какой смысл динамически загружать? чтобы просто сказать пользователю мол нет такой dll и уйти?.. тоже самое может сделать сама ОСь
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение Replicator » 22.06.2007 20:54:39

Не знаю. Pascal, в отличие от C++, прекрасно работает со статическим импортом - все просто и понятно. Так что зачем изобретать, не ясно. Разве только для вирусов и всего того, что обязательно должно быть в одном и только одном файле.
Replicator
постоялец
 
Сообщения: 154
Зарегистрирован: 30.04.2006 17:14:45
Откуда: Outer Heaven

Сообщение Юра » 23.06.2007 11:58:53

shade писал(а):Ну если программа зависит от некоторой dll, то какой смысл динамически загружать? чтобы просто сказать пользователю мол нет такой dll и уйти?.. тоже самое может сделать сама ОСь

Например, программа должна работать как на вин9х, так и на винНТ. Но при запуске на ВинНТ она должна использовать какие-то специфические функции, которых в вин9х не существует, например, работу с доменными пользователями.
Вот тут динамический импорт просто необходим. Если нужной длл или функций нет, то они просто не используются...
Юра
постоялец
 
Сообщения: 163
Зарегистрирован: 25.05.2005 10:20:09
Откуда: Украина, Киев

Сообщение shade » 23.06.2007 22:31:55

Это очень редко нужно, а динамический экспорт делают на право и налево...
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение Юра » 24.06.2007 00:08:42

shade писал(а):Это очень редко нужно, а динамический экспорт делают на право и налево...


Да, это не часто нужно. И делать такое для всех длл бессмысленно...
Юра
постоялец
 
Сообщения: 163
Зарегистрирован: 25.05.2005 10:20:09
Откуда: Украина, Киев

Сообщение Replicator » 24.06.2007 15:12:54

Вот мне стало интересно, неужели еще 98 винда осталась? Уже хрюша начинает завершать свой век (конечно, это продлиться как минимум пару лет, но все же), а тут еще о 98 заботятся... Честно говоря, не знаю, насколько сейчас необходимо осуществлять поддержку win 98.
Replicator
постоялец
 
Сообщения: 154
Зарегистрирован: 30.04.2006 17:14:45
Откуда: Outer Heaven

Сообщение LAutour » 25.06.2007 06:27:19

Replicator
Куча старых компов, где 98se наиболее актуальна и быстрее Win2k, WinXP. Плюс специфический софт, который работает только под Win9x, WinMe.

Один актульный пример нужности динамической загрузки dll - запуск Unicode-программы под Win9x с использованием Unicows.dll.
LAutour
новенький
 
Сообщения: 34
Зарегистрирован: 13.06.2006 10:30:34

Сообщение Replicator » 25.06.2007 13:24:40

Не, если стоит задача сделать кросс 98-XP, то динамическая загрузка может быть полезной. А сейчас такая байда пойдет уже с XP-Vista.
Replicator
постоялец
 
Сообщения: 154
Зарегистрирован: 30.04.2006 17:14:45
Откуда: Outer Heaven

След.

Вернуться в Сторонние средства

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

Рейтинг@Mail.ru