Форум » Clipper » Декомпилиция LIB файла » Ответить

Декомпилиция LIB файла

adz: Здравствуйте господа. Понадобилась декомпилировать один Lib(escc.lib) файл(clipper 5.2e + rtlink). Собираю exe вот такой командой [quote]set include=F:\clip\include\ set lib=F:\clip\lib\ set obj=F:\clip\obj\ @echo on CLS ..\bin\CLIPPER test ..\bin\rtlink FI test LIB escc [/quote] где Test - Prg всего лишь с одной командой cls Загружаю потом полученный exe в валькирию и там пусто нет функций из этой библиотеки. Умный компилятор скорее всего выкинул ее из exe, т.к нет вызовов из нее Может можно указать rtlink чтобы он так не делал и все равно линковал данный Lib? Или надо добавить вызов хотя бы одной функции из escc.lib? Подскажите как правильно собрать exe. Offtopic: Куплю книгу Сухов, Н.Е. Практический курс программирования на CA-Clipper. Дорого

Ответов - 5

Pasha: Библиотека состоит из obj-модулей. Для того, чтобы в exe-файл был включен модуль из библиотеки, необходимо в test.prg добавить вызов хотя бы одной функции из этого модуля. т.е. test.prg должен быть таким: cls func1() func2() ... Для просмотра списка модулей и функций надо найти программу типа libview. Еще конечно список можно получить программами вроде tlib.exe, lib.exe (смотря чем библиотека была создана) Но имейте в виду, что декомпилятор сработает только для клиппер-функций. Если часть функций написана на С, asm, то понадобится совсем другая декомпиляция.

adz: Библиотека состоит из obj-модулей. Для того, чтобы в exe-файл был включен модуль из библиотеки, необходимо в test.prg добавить вызов хотя бы одной функции из этого модуля. т.е. test.prg должен быть таким: cls func1() func2() ... Именно так и сделал. И эта одна функция оказалась в exe. Я думал компиль внесет код и остальных функций но увы нет (( Придется выяснять пролог всех функций (( Еще конечно список можно получить программами вроде tlib.exe, lib.exe (смотря чем библиотека была создана) Эти программы входят в дистрибутив клиппера? Или их надо отдельно искать? Но имейте в виду, что декомпилятор сработает только для клиппер-функций. Если часть функций написана на С, asm, то понадобится совсем другая декомпиляция. Нет там нету вставок С и ASM. Только стандартные функции clipper и возможно CT52. А можно вкратце описать как делается Lib файл? Если это описано в NG то я поищу сам

Pasha: Нашел у себя в чулане эти программы, еще 1992-й год: http://gfile.ru/a57gl lib, tlib - это утилиты от компиляторов ms и borland соответственно, libview - вьювер для nc/vc Синтаксис для lib: lib.exe <libname.lib>, file.lst затем изучать получившийся file.lst Синтаксис tlib кажется такой же. Библиотека делается как раз этими утилитами. Как - надо вызвать экран помощи: lib.exe /?

Haz: adz пишет: ..\bin\CLIPPER test ..\bin\rtlink FI test LIB escc оч давно делал так rtlink FI escc.lib и потом декомпиляция

adz: Вообщем получилось сделать то, что хотел. Опишу вкратце алгоритм если вдруг кому пригодится. Все что напсианр ниже исключительно для начиающих. Матерым клиперистом читать не нужно =) Дано: нужно получить исходники lib файла. Успех зависит от такого, что вы знаете об этом файле. У меня есть исходник где вызываются функции из этой библиотеки. Поэтому я знаю количество параметров и их тип. И примерно логику что там происходит. У меня также есть скрипт сборки всего этого добра. Поэтому я знаю что там не используется какие-либо внешние библиотеки ASM и C вставки. Соответвенно я знаю компилятор и линкер которым все это собирается. Все это очень облегчает задачу. Приступим. 1. Качаем архив http://gfile.ru/a57gl. Спасибо огромное Pasha за утилиты и ликбез. Если на момент когда вы читает эти строки архив уже не доступен. То в нем лежат lib.exe и tlib.exe. Это утилиты для работы с Lib файлами от Майкрософт(lib.exe) и Borland(tlib.exe). Ищите их в старых дистрибутивах Visual C++ и Borland C++. Конкретные версии назвать не могу. 2. Получаем список obj модулей из которых состоит lib. Команда lib.exe ESCC.lib,file.lst где ESCC.lib - название вашего lib файла( лежит в папке вместе с lib.exe) file.lst - текстовый файл с описание obj файлво входящих в Lib. 3. Смотрим результат file.lst. В моем случае он выглядит так: GET_PICT..........get_pict GET_PICTUR........get_pict LEES..............lees_is LEES_IS...........lees_is STRANGE_SE........str_ser STR_SER...........str_ser VOPR..............vopr VOPROS............vopr get_pict Offset: 00000010H Code and data size: 121H GET_PICT GET_PICTUR lees_is Offset: 00000430H Code and data size: b6H LEES LEES_IS vopr Offset: 000007b0H Code and data size: 3ffH VOPR VOPROS str_ser Offset: 00000f30H Code and data size: 823H STRANGE_SE STR_SER Мы видим что он состоит из четырех obj файлов: get_pict,lees_is,vopr,str_ser 4. Далее надо извлечь эти obj файлы. Выполняем LIB ESCC *get_pict, RESULT2.LST где ESCC - понятно наш Lib файл, *get_pict - название Obj файла внутри Lib. На выходже получаем obj файл. В моем случае это get_pict.obj 5. Далее собираем exe.Например так: rtlink FI TEST,GET_PICT LIB Ct52 где test - prg файл. У меня он пустой с одной командой cls. LIB Ct52 - не обязательно. Просто из анализа исходников где используется этот Lib файл, я знал что возможно используются функции из clipper tools. Если например собрать вот такой командой rtlink FI TEST,GET_PICT. То exe соберется но выдаст предупреждение: F:\CLIP\GPPD>..\bin\rtlink FI TEST,GET_PICT .RTLink for Clipper Dynamic Overlay Linker / Pre-Linker Version 3.14B (C) Copyright Pocket Soft Inc., 1988-1991. All Rights Reserved. UNDEFINED SYMBOL(S) AFTER LIBRARY SEARCH: SYMBOL FIRST REFERENCE ------ --------------- 'FIELDDECI' GET_PICT.OBJ 'FIELDNUM' GET_PICT.OBJ 'FIELDSIZE' GET_PICT.OBJ warning wrt0022: .EXE may not execute properly -- undefined symbols 224K 1 warning message(s) Из этого сообщения понятно что линкер на знает что такое FIELDDECI,FIELDNUM,FIELDSIZE которые используются в get_piсt.obj Быстрое гугление показывает, что это функции из clipper tools которые входят в стандартный дистрибутив clipper. Поэтому мы подключаем командой LIB Ct52 - эту библиотеку. 6. Далее скармливаем Valkyrie полученный exe. Кстати нашел версию Valkyrie 2( на сайте лежит версия 1.0f). Вот она http://rghost.ru/53122683. Если на момент чтения эта ссылка уже померла то гуглите по названию архива Valkyrie_CA-Clipper_Decompiler_(full).rar 7. На выходе получаем почти исходник. У меня он получился такой. #include "common.ch" #include "inkey.ch" ******************************** function GET_PICTUR(Arg1, Arg2) local Local1, Local2, Local3 Local2:= &Arg1->(fielddeci(&Arg1->(fieldnum(Arg2)))) Local3:= &Arg1->(fieldsize(&Arg1->(fieldnum(Arg2)))) if (Local2 != 0) mypicture:= Replicate("9", Local3 - Local2 - 1) + "." + ; Replicate("9", Local2) else mypicture:= Replicate("9", Local3) endif return mypicture Красота. Потерялись название только локальных переменных (Local1, Local2, Local3). Восстановить их не составит труда. Параметры Arg1 и Arg2 я знаю из анализа работы исходников. Остальные функции получаем по аналогии. Но не всегда все так красиво получается. Просто у меня было много исходных данных и сама Lib очень маленькая. Поэтому все легко восстановить.



полная версия страницы