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

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

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

Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

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

Сообщение Attid »

кто нибуть юзал сие чудо ?
http://www.basegraph.com/bg/tutorials/e ... tools.html
а может кто-то хочет и не знает =)
правда под дельфю изначально но думаю перевести можно.
суть программы в том чтобы перевести dll в пасовский файл который можно потом использовать в проэкте и не таскать вместе с приложением доп бублиатеки.
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Сообщение Иван Шихалев »

И что, работает?
Replicator
постоялец
Сообщения: 154
Зарегистрирован: 30.04.2006 17:14:45
Откуда: Outer Heaven
Контактная информация:

Сообщение Replicator »

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

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

Но это такое извращение... Кстати, раньше я тоже был сторонником делать все приложение одним файлом. Но это прошло. Так что мой совет: научитесь пользоваться утилитами для создания установочных файлов, InnoSetup - отличная штука.
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

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

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

эт по памяти когда давно с ней игрался, сейчас под вайном лениво запускать чтоб проверить =)
ev
долгожитель
Сообщения: 1791
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Сообщение ev »

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

сейчас это стало распространенным трюком для троянов
поэтому многие файрволы начинают пищать :(
пока насколько я знаю остался еще один метод (по крайней мере агнитум не ругается)
но опять - все это только под винды ;)
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

Прочитал,.. хм.. а мне показалось что речь идет о переводе модулей (юнитов) импорта 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');
.....


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

Сообщение Юра »

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


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

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

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

Сообщение shade »

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

Сообщение Replicator »

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

Сообщение Юра »

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

Например, программа должна работать как на вин9х, так и на винНТ. Но при запуске на ВинНТ она должна использовать какие-то специфические функции, которых в вин9х не существует, например, работу с доменными пользователями.
Вот тут динамический импорт просто необходим. Если нужной длл или функций нет, то они просто не используются...
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

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

Сообщение Юра »

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


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

Сообщение Replicator »

Вот мне стало интересно, неужели еще 98 винда осталась? Уже хрюша начинает завершать свой век (конечно, это продлиться как минимум пару лет, но все же), а тут еще о 98 заботятся... Честно говоря, не знаю, насколько сейчас необходимо осуществлять поддержку win 98.
LAutour
новенький
Сообщения: 34
Зарегистрирован: 13.06.2006 10:30:34
Контактная информация:

Сообщение LAutour »

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

Один актульный пример нужности динамической загрузки dll - запуск Unicode-программы под Win9x с использованием Unicows.dll.
Replicator
постоялец
Сообщения: 154
Зарегистрирован: 30.04.2006 17:14:45
Откуда: Outer Heaven
Контактная информация:

Сообщение Replicator »

Не, если стоит задача сделать кросс 98-XP, то динамическая загрузка может быть полезной. А сейчас такая байда пойдет уже с XP-Vista.
Ответить