On-line: гостей 3. Всего: 3 [подробнее..]
АвторСообщение



Пост N: 1
Зарегистрирован: 17.03.14
ссылка на сообщение  Отправлено: 17.03.14 09:42. Заголовок: Декомпилиция LIB файла


Здравствуйте господа. Понадобилась декомпилировать один Lib(escc.lib) файл(clipper 5.2e + rtlink).
Собираю exe вот такой командой

 цитата:
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



где Test - Prg всего лишь с одной командой cls
Загружаю потом полученный exe в валькирию и там пусто нет функций из этой библиотеки. Умный компилятор скорее всего выкинул ее из exe, т.к нет вызовов из нее
Может можно указать rtlink чтобы он так не делал и все равно линковал данный Lib? Или надо добавить вызов хотя бы одной функции из escc.lib?
Подскажите как правильно собрать exe.

Offtopic: Куплю книгу Сухов, Н.Е. Практический курс программирования на CA-Clipper. Дорого

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 5 [только новые]


Администратор




Пост N: 3127
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 17.03.14 10:25. Заголовок: Библиотека состоит и..


Библиотека состоит из obj-модулей. Для того, чтобы в exe-файл был включен модуль из библиотеки, необходимо в test.prg добавить вызов хотя бы одной функции из этого модуля.

т.е. test.prg должен быть таким:

cls
func1()
func2()
...

Для просмотра списка модулей и функций надо найти программу типа libview. Еще конечно список можно получить программами вроде tlib.exe, lib.exe (смотря чем библиотека была создана)

Но имейте в виду, что декомпилятор сработает только для клиппер-функций. Если часть функций написана на С, asm, то понадобится совсем другая декомпиляция.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 2
Зарегистрирован: 17.03.14
ссылка на сообщение  Отправлено: 17.03.14 10:42. Заголовок: Библиотека состоит ..



 цитата:

Библиотека состоит из obj-модулей. Для того, чтобы в exe-файл был включен модуль из библиотеки, необходимо в test.prg добавить вызов хотя бы одной функции из этого модуля.

т.е. test.prg должен быть таким:

cls
func1()
func2()
...



Именно так и сделал. И эта одна функция оказалась в exe. Я думал компиль внесет код и остальных функций но увы нет ((
Придется выяснять пролог всех функций ((

 цитата:
Еще конечно список можно получить программами вроде tlib.exe, lib.exe (смотря чем библиотека была создана)


Эти программы входят в дистрибутив клиппера? Или их надо отдельно искать?


 цитата:
Но имейте в виду, что декомпилятор сработает только для клиппер-функций. Если часть функций написана на С, asm, то понадобится совсем другая декомпиляция.


Нет там нету вставок С и ASM. Только стандартные функции clipper и возможно CT52.
А можно вкратце описать как делается Lib файл? Если это описано в NG то я поищу сам

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3128
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 17.03.14 10:55. Заголовок: Нашел у себя в чулан..


Нашел у себя в чулане эти программы, еще 1992-й год:

http://gfile.ru/a57gl

lib, tlib - это утилиты от компиляторов ms и borland соответственно, libview - вьювер для nc/vc

Синтаксис для lib:

lib.exe <libname.lib>, file.lst

затем изучать получившийся file.lst
Синтаксис tlib кажется такой же.
Библиотека делается как раз этими утилитами. Как - надо вызвать экран помощи:

lib.exe /?


Спасибо: 1 
ПрофильЦитата Ответить
moderator


Пост N: 153
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 17.03.14 11:05. Заголовок: adz пишет: ..\b..


adz пишет:

 цитата:
..\bin\CLIPPER test
..\bin\rtlink FI test LIB escc



оч давно делал так rtlink FI escc.lib
и потом декомпиляция

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3
Зарегистрирован: 17.03.14
ссылка на сообщение  Отправлено: 17.03.14 13:17. Заголовок: Вообщем получилось с..


Вообщем получилось сделать то, что хотел. Опишу вкратце алгоритм если вдруг кому пригодится. Все что напсианр ниже исключительно для начиающих. Матерым клиперистом читать не нужно =)
Дано: нужно получить исходники 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 очень маленькая. Поэтому все легко восстановить.




Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 298
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет