Сейчас на форуме: kris_sexy, ==DJ==[ZLO] (+6 невидимых) |
eXeL@B —› Крэки, обсуждения —› Использование APLib библиотеки |
Посл.ответ | Сообщение |
|
Создано: 04 декабря 2005 23:22 · Личное сообщение · #1 Подскажите, почему библиотеку APLib нельзя применять для любых типов данных (или все таки можно ?) Суть в том, что некоторые секции (например DATA в дельфовых прогах) повреждаются после распаковки, т.е. оригинал и распакованная не совпадают , хотя начало секции распаковывается правильно, а через байт 200-300 уже нет... =( PS: для запака использую саму библу, для распаковки - ассемблерный листинг c ESI и EDI в качестве указателей... ----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels |
|
Создано: 05 декабря 2005 00:28 · Личное сообщение · #2 |
|
Создано: 05 декабря 2005 08:43 · Поправил: Smon · Личное сообщение · #3 Версия APLib 0.42 function PackSection(source1:pointer; size:dword):pointer; begin form1.CurFileSz:=size; form1.aPLib.Source := source1; form1.aPLib.Length := size; form1.aPlib.CallBack := @CallBack; form1.aPLib.Pack; PACKEDSECTION:= form1.aPLib.Length; if form1.aPLib.Length = 0 then Exit; result:=form1.aPLib.Destination; end; For I:=1 to FILE_HEADER.NumberOfSections do begin temp:=pointer(GlobalAlloc(GMEM_ZEROINIT,SECTION_HEADER[I].SizeOfRawDat a)); SetFilePointer(hFile,SECTION_HEADER[I].PointerToRawData,NIL,FILE_BEGIN ); ReadFile(hFile,temp^,SECTION_HEADER[I].SizeOfRawData,bread,NIL); PackSection(pointer(temp),SECTION_HEADER[I].SizeOfRawData); Для распаковки используется листинг на асме, входящий в состав библиотеки (начинается с cld) Момент в том, что другие секции распаковываются верно, кроме этой Прикладываю оригинал, запакованную и неверно распакованную =) 33b8_datasection.rar.zip ----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels |
|
Создано: 05 декабря 2005 12:42 · Личное сообщение · #4 |
|
Создано: 05 декабря 2005 12:47 · Поправил: Smon · Личное сообщение · #5 MoonShiner У меня был точно такой глюк, когда я использовал VirtualAlloc в асме при распаковке, когда начал использовать GlobalAlloc - вроде прошло... И еще один глюк встретил - когда перед началом распаковки стоит к примеру - mov dword [esp+11C], eax - значение из eax соответсно пишется двордом в esp+11C, распаковка падает где то на середине, сместил эту команду на пару назад (чтобы она не была последней перед началом распаковки) - всё ок... ----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels |
|
Создано: 05 декабря 2005 16:24 · Личное сообщение · #6 Имел место такой трабл ... но чуть подругому. Если прогу пишешь на дельфе с OOП как обычно вобшем (D7) то всё работает ок, пакует и анпачит. А асли на чистом АПИ пишешь то слетает какраз на этом месте при паковке.Хотя всё ф-ци идентичны. Мож какие нибудь опции линкера или компилера влияют я так с этим и не разобрался. Данную траблу так и не решил, можете и мне заодно намекнуть в чём дело |
|
Создано: 05 декабря 2005 17:28 · Поправил: 6aHguT · Личное сообщение · #7 MoonShiner пишет: SysAllocStringByteLen, как и в примерах aPLib, и все прошло... странно но ничего кроме FileIn := TFileStream.Create(OD.FileName,fmOpenRead or fmShareDenyWrite);
я там не увидел ... поправте где нужно смотреть плиз |
|
Создано: 05 декабря 2005 17:51 · Личное сообщение · #8 |
|
Создано: 05 декабря 2005 21:42 · Личное сообщение · #9 |
|
Создано: 06 декабря 2005 01:29 · Поправил: DrGolova · Личное сообщение · #10 Афтору надо писать на конкретном примере! Реальная альтернатива - lzma =) JCALG1 - говно, слишком медленный и мясистый распаковывщик. Можно конечно попробовать свежий ffce от джибса, но не факт что там нет косяков - этот метод еще моложе аплиба. Про lzh это наверно шутка, это название метода сжатия, а lzh алгоритмов полно, один хуже ругого. Один из лучших в аспаке последнем и в скажем CAB архивах,, остальное детские поделки, типа японских lha подобных пакеров прошлого тысячелетия с окном в 2кб =)) Если нужен именно чистый lz упаковщик, то лично мне нравится UCL от оберхумера, это действительно промышленно вылизанный упаковщик, даже в насовских спутниках используется для сжатия трафика. |
|
Создано: 06 декабря 2005 08:17 · Личное сообщение · #11 |
|
Создано: 06 декабря 2005 11:47 · Личное сообщение · #12 |
|
Создано: 06 декабря 2005 12:37 · Поправил: Smon · Личное сообщение · #13 6aHguT Да от оберхумера то нетрудно сырец найти (он помойму даж с упхом идёт в комплекте), только вот к дельфе не прикрутить , надо всё тогда на сях писать =( на www.compression.ru http://www.compression.ru навалом всяких пак алго нашел =) Интересно, что PESpin тоже использует APLib, но секцию эту пакует и распачит верно ----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels |
|
Создано: 06 декабря 2005 17:09 · Личное сообщение · #14 |
|
Создано: 06 декабря 2005 17:13 · Личное сообщение · #15 6aHguT пишет: Я щас lzma заюзать попробую Получится если, дашь исходник библы для запака и асмовый код распака ? 6aHguT пишет: видать у нас ручки кривоваты У нас - это у меня или у обоих ? ----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels |
|
Создано: 06 декабря 2005 18:39 · Личное сообщение · #16 |
|
Создано: 06 декабря 2005 20:01 · Личное сообщение · #17 |
|
Создано: 09 декабря 2005 03:33 · Поправил: DrGolova · Личное сообщение · #18 > Качнул сорс lzma а он для никсов оказался Да не песди - он кросплатформенный - я его и под винду собирал и под бздю. Могу собрать тебе dll но не на delphi - сей убогий язык как оказалось я забыл - сегодня с помощью двух гуру со скрипом написал прогу на дельфе в десять строк за пол часа. Было стыдно |
|
Создано: 09 декабря 2005 08:12 · Личное сообщение · #19 DrGolova пишет: сей убогий язык как оказалось я забыл - сегодня с помощью двух гуру со скрипом написал прогу на дельфе в десять строк за пол часа А помнится как-то писал PE_Files.pas - полезная ведь штука Ксати что интересно по поводу aplib'а - если паковать все секции одним потоком а не по отдельности - то проблем с целостностью данных нет ----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels |
|
Создано: 11 декабря 2005 21:18 · Личное сообщение · #20 |
|
Создано: 15 декабря 2005 23:36 · Поправил: Smon · Личное сообщение · #21 Во, я нашел такую же багу в AlexProtector =) 1.0 Beta 2 Тоже юзается аплиб..... После упаковки прога на дельфах падает, причем так же, секция DATA распачится неверно =) причем падает уже после оеп... Когда я сделал всё одним потоком - дельфовые перестали падать, зато начали падать C++ Builder'ские с неверной распаковкой секции импорта Ясно то, что дело не в самой библе, а в асмовом коде распаковки, что-то где то не учтено... (хотя учтено в том же песпине и пекомпакте) DrGolova пишет: Можно конечно попробовать свежий ffce от джибса Где бы его только взять, на офсайте то нет... ----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels |
|
Создано: 16 декабря 2005 00:13 · Личное сообщение · #22 |
|
Создано: 06 августа 2006 13:07 · Личное сообщение · #23 Предположу, что не обрабатывали TLS.AddressOfIndex. Его надо редиректить в другое место, т.к. при запуске DWORD по этому адресу обнуляется, а в Дельфовых прогах (Delphi 200x) адрес указывает в середину пакованной секции, поэтому секция нераспаковывается. Хотя хз в чем у вас прабла была, но я юзаю аплиб 0.42 давно и с делфи у меня праблов нет. |
|
Создано: 06 августа 2006 13:53 · Личное сообщение · #24 |
|
Создано: 09 августа 2006 02:06 · Личное сообщение · #25 |
eXeL@B —› Крэки, обсуждения —› Использование APLib библиотеки |