Сейчас на форуме: asfa, bartolomeo (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Помогите подружить LIB и Delphi
Посл.ответ Сообщение

Ранг: 3.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 08 мая 2012 00:04
· Личное сообщение · #1

Помогите. Возникла необходимость из Delphi достучаться до файла LIB.
Сам LIB - библиотека статической компоновки. Внутри - куча OBJ файлов.
В принципе (если верить Гуглю ) есть 2 варианта:
1) При помощи С++ из LIB сделать DLL. Долго курил мануалы ... Не осилил. Совсем С++ не знаю.
2) Вытащить OBJ и работать непосредственно с ними.

Естественно придется "поиграться" с типом и порядком передаваемых функций.

При помощи objconv вытащил OBJ в OMF формате ( Delphi COFF не понимает в принципе)
Пытаюсь подцепить OBJ к Delphi - говорит "ошибка формата OBJ".
Смотрю OBJ через IDA - говорит " Format : Object Module Format (OMF/Microsoft)"
Видит экспорт, импорт и всё остальное ... А Delphi (XE) (RAD Studio 8.0) не хочет брать ...

Что посоветуете? Есть описание OBJ OMF формата? На всякий случай воткнул OBJ файл.

0729_07.05.2012_EXELAB.rU.tgz - mr_unzip.obj



Ранг: 27.8 (посетитель), 51thx
Активность: 0.030
Статус: Участник

Создано: 08 мая 2012 00:42 · Поправил: ADMIN-CRACK
· Личное сообщение · #2

То не то?
В атаче.
Дергай функи либы.
пысы:Не туда загнал.

По любому у объекта есть функции их и дергай.



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 08 мая 2012 02:31
· Личное сообщение · #3

DSA
по моему Дельфи не работает ни с lib ни с obj
Ето все прерогатива С/C++ ....
надо делать дллку и с ней работать



Ранг: 27.8 (посетитель), 51thx
Активность: 0.030
Статус: Участник

Создано: 08 мая 2012 03:05 · Поправил: ADMIN-CRACK
· Личное сообщение · #4

sendersu
Работает делфи с .obj.
Пример тому MiniFMOD и не только.
Много встречалось исходников с портом под делфи с obj файлами.
Просто сейчас точно не вспомню какие.



Ранг: 20.2 (новичок), 16thx
Активность: 0.020.01
Статус: Участник

Создано: 08 мая 2012 04:31
· Личное сообщение · #5

Есть утилита для преобразования obj в дельфовый формат omf2d.exe

Вот здесь обсуждение её и не только: http://exelab.ru/f/action=vthread&forum=6&topic=11885



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 08 мая 2012 09:53
· Личное сообщение · #6

ADMIN-CRACK
вы правы
вот здесь кто-то очень хорошо расписал свой опыт (.obj -> Дельфи)

http://rvelthuis.de/articles/articles-cobjs.html

правда не всякий obj можно заюзать! например С++ нельзя, obj не от Борладн компилера и т.д
+ надо прототипы функций самому в Дельфи написать......

Вобщем при желании можно



Ранг: 112.9 (ветеран), 186thx
Активность: 0.090.01
Статус: Участник

Создано: 08 мая 2012 12:23 · Поправил: vden
· Личное сообщение · #7

Одно дело прилинковать 1 obj или кучу.

Все эти конверсии объектных файлов работают далеко не всегда. Как уже было сказано в посте #3, надёжнее сделать dll и переписать заголовки.

Если билдером у вас получиться скомпилить исходники, то полученные obj можно будет прилинковать в delphi. Как например в zlib.pas и сделано.

Но опять же может вылезти куча ньюансов.

PS кстати в XE2 есть нативаная поддержка zip'ов, правда без паролей (facepalm)



Ранг: 114.8 (ветеран), 41thx
Активность: 0.10
Статус: Участник

Создано: 08 мая 2012 13:01
· Личное сообщение · #8

здесь обсуждалась схожая проблема (стр. 3 и 4)
https://ssl.exelab.ru/f/action=vthread&forum=6&topic=17409&page=2



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 08 мая 2012 13:06 · Поправил: ELF_7719116
· Личное сообщение · #9

Тут, как я понимаю, обсуждение уже в голосование перешло.
Проще конечно - Dll и ее экспорт(GetModuleHandle/GetProcAddress)
С другой стороны, если идет речь о формате zip и его pack/unpack, то обладая минимальные познаниями С++ можно запилить Delphi код из хотя бы таких исходников



Ранг: 72.1 (постоянный), 30thx
Активность: 0.050
Статус: Участник

Создано: 08 мая 2012 21:27
· Личное сообщение · #10

Еще был порт ZLib для дельфи - paszlib



Ранг: 3.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 10 мая 2012 13:23 · Поправил: DSA
· Личное сообщение · #11

Тема переросла в обсуждение архиваторов Хотя речь не о этом.

В общем рассказываю по мытарства в выходные:
OBJ вытащил. В OMF формат конвертировал. Все дизассемблеры утверждают, что OBJ в OMF формате и что файл "нормальный".

Вот только Delphi в упор файл не признает. Капризный? Возможно файл содержит некоторые "особенности" которые не нравятся Delphi. И только ему.

В принципе возможно использовать "методом топора" В тексте влепить ASM ... END и влепить туда кусок кода. Придется вырезать заголовок и хвост функции и помудрить с передачей параметров... Но в принципе пробовал. Работает. Изврат конечно ещё тот ...

Но:
Нередко функция тащит за собой вызов функций из других OBJ. А это реально напрягает.
Часто функция обращается к глобальному сегменту данных. Хранит там глобальные переменные, доступные для других функций. То-же не красиво ...

Пока у меня нет приемлемого решения. 44 OBJ переписывать руками (в каждой от 1 до 60 функций) - проще застрелиться. Продолжаю думать и ковырять инет.

P.S.: Не нужно обсуждать архиваторы. Данный файл был выбран на роль "подопытного кролика". В мелком файле проще разбираться и ковыряться. Аналог этого файла найти не проблема. А надо - сам напишу за пару часов. Это просто один из пары десятков OBJ. Просто я не нем обкатывал проблемы подключения OBJ из LIB.

В принципе есть утилита LIB2DLL , но я никак не могу её найти.



Ранг: 72.1 (постоянный), 30thx
Активность: 0.050
Статус: Участник

Создано: 11 мая 2012 07:33 · Поправил: yagello
· Личное сообщение · #12

DSA пишет:
В принципе есть утилита LIB2DLL , но я никак не могу её найти.

Ну найти-то не проблема
_http://www.findthatfile.com/download.php?i=3842561&t=hZIP
_http://www.findthatfile.com/search-3842561-hZIP/winrar-winzip-download-rsxdj151.zip.htm
_http://www.findthatfile.com/download.php?i=12987563&t=hZIP
_http://www.findthatfile.com/search-12987563-hZIP/winrar-winzip-download-rsxdj131.zip.htm




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 11 мая 2012 20:18
· Личное сообщение · #13

DSA
в 99% процентах подобных задач был облом. так что ида + асм ресборка

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




Ранг: 112.9 (ветеран), 186thx
Активность: 0.090.01
Статус: Участник

Создано: 12 мая 2012 11:12
· Личное сообщение · #14

@DSA
При помощи С++ из LIB сделать DLL. Долго курил мануалы ... Не осилил. Совсем С++ не знаю.
Сделать библиотеку-wrapper может быть и рутинно, но вполне реально.
Кроме того, достаточно экспортировать только то, что нужно.

Вообще выложили бы lib, заголовки, сказали что хотите использовать.
А так имхо все ответы уже даны.



Ранг: 3.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 12 мая 2012 12:12
· Личное сообщение · #15

Если-бы заголовки были ... Нету заголовочных файлов. Только самому писать.
"в 99% процентах подобных задач был облом. так что ида + асм ресборка"
Походу и я туда иду.

Попробую сам на C++ осилить. Тяжело конечно, но нужно ...



Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 13 мая 2012 00:47
· Личное сообщение · #16

DSA
У самого была такая проблема, если LIB большая то пиши wrapper, с конвертировать что то рабочее мало вероятно, по личному опыту, да и глядя на другие проекты, народ тоже пришел к такому мнению.
Wrapper написать куда проще чем заниматься онанизмом с асмом.


 eXeL@B —› Вопросы новичков —› Помогите подружить LIB и Delphi
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати