Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22621 Location: Silicon Valley
|
да я смотрю: как это работает, если внутри depack_getbyte написано вот это: каким таким волшебным образом байт (читаемый следом за битом) всегда выравнен на границу ULONG?...
|
02 Feb 2017 10:55 |
|
|
angry_troll
Doomed
Joined: 08 Apr 2013 04:04 Posts: 449 Location: 213.247.249.139
|
А, простите, тип wrk.indata какой?
_________________ привет засранцу лавру :)
|
02 Feb 2017 11:09 |
|
|
angry_troll
Doomed
Joined: 08 Apr 2013 04:04 Posts: 449 Location: 213.247.249.139
|
Уже даже и не знаю, как объяснять... Внутри гетбитса есть буфер битов... Они оттуда вынимаются, пока не кончатся. Как кончатся -- новый байтик (или ворд) подчитываются из *единственного* байтового потока. Из него же (байтового потока) подчитываются и байты для ссылок, ежели таковые требуются.
_________________ привет засранцу лавру :)
|
02 Feb 2017 11:22 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22621 Location: Silicon Valley
|
байт? ну выровненость на границу байта всё равно непонятна как? байты для ссылок могут начинаться где угодно - они не выровнены на границу байта, разве нет? или там реально неиспользуемые дырки? на чтении невыровненного 1 бита и затем выровненного 1 байта можно до 7 бит потерять, что между ними пропускаются...
|
02 Feb 2017 11:48 |
|
|
angry_troll
Doomed
Joined: 08 Apr 2013 04:04 Posts: 449 Location: 213.247.249.139
|
Я прям даже и не знаю, как ещё объяснить. биты берутся ИЗ БУФЕРА длиной в 1 байт! А не сразу из запакованного файла. этот буфер ПОПОЛНЯЕТСЯ целым байтом когда опустошается Поэтому байты берутся байтами выровненными, а биты -- битами, но из буфера. Простейшая концепция, но основа всех (почти) депакеров на спектурме.
_________________ привет засранцу лавру :)
|
02 Feb 2017 12:14 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22621 Location: Silicon Valley
|
| | | | angry_troll wrote: Я прям даже и не знаю, как ещё объяснить. биты берутся ИЗ БУФЕРА длиной в 1 байт! А не сразу из запакованного файла. этот буфер ПОПОЛНЯЕТСЯ целым байтом когда опустошается Поэтому байты берутся байтами выровненными, а биты -- битами, но из буфера. Простейшая концепция, но основа всех (почти) депакеров на спектурме. | | | | |
хм, т.е. описание формата, на которые ты выше сослался, не соответствует действительности? биты идут сами по себе, а байты - сами по себе и всё намешано? да - судя по всему так и есть - мрак...
|
02 Feb 2017 12:18 |
|
|
angry_troll
Doomed
Joined: 08 Apr 2013 04:04 Posts: 449 Location: 213.247.249.139
|
_________________ привет засранцу лавру :)
|
02 Feb 2017 12:43 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22621 Location: Silicon Valley
|
Как-то очень расплывчато написано...
Я подозреваю что отладить все вариации битовых команд и байтов в таком случае практически невозможно
|
02 Feb 2017 12:49 |
|
|
angry_troll
Doomed
Joined: 08 Apr 2013 04:04 Posts: 449 Location: 213.247.249.139
|
А я как имевший дело с мегалзом, понимающий более-менее его распаковщик и т.д. -- это очень удачный формат хранения ссылок. Когда нужны биты -- вот они, а когда байты -- вон они, по указателю в регистре лежат. Отлаживать там практически нечего, покрмере в этом месте.
_________________ привет засранцу лавру :)
|
02 Feb 2017 13:13 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22621 Location: Silicon Valley
|
Ну да - может оно и быстрее декодит, но геморнее
|
02 Feb 2017 14:07 |
|
|
angry_troll
Doomed
Joined: 08 Apr 2013 04:04 Posts: 449 Location: 213.247.249.139
|
Хм, чего геморного-то, правильно перемешать битстрим с байтстримом? Внутри (в пакере) всё равно все ссылки существуют далеко не в виде битовых последовательностей. А вывод их в нужном формате -- тривиальная (хоть и немного утомительная) писанина. Проверить можно просто -- распаковкой нативным Z80-депакером.
_________________ привет засранцу лавру :)
|
02 Feb 2017 16:09 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22621 Location: Silicon Valley
|
Вот так пока выходит (отсортировал по степени сжатия):
|
02 Feb 2017 17:34 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22621 Location: Silicon Valley
|
Все - допилил декодер формата SHAFF0 - все работает Причем получившийся файл меньше 1000 строк: github.com/shaos/shaff/blob/master/shaff.c Все что насжимал вчера сегодня успешно разжалось (сверял MD5) Следом буду прикручивать битопоточный SHAFF1 (или сначала ускорением сжатия заняться?)
|
03 Feb 2017 00:20 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22621 Location: Silicon Valley
|
Планы на будущее:
SHAFF2 - формат с общей таблицей Хаффмана для литералов всего файла (формат ссылок остаётся таким же как в SHAFF1)
SHAFF3 - формат где у каждого 16КБ блока имеется своя таблица Хаффмана, включающая 1,2 и 3-символьные литералы, а также ссылки (этот формат должен побить всех самодельщиков : )
Кроме этого последний формат может стать полноценным архиватором, когда в один архив могут быть добавлены несколько файлов...
|
03 Feb 2017 08:36 |
|
|
angry_troll
Doomed
Joined: 08 Apr 2013 04:04 Posts: 449 Location: 213.247.249.139
|
Главное ещё чтоб exomizer побил. Кстати, если надо сжать несколько /разных/ блоков, например графика, музло, код, то если их сжимать exomizerом по отдельности -- будет выигрыш по сравнению с тем, если их сжимать одним конкатенированным куском. кстати, почему exomizerа нет в твоих сравнивалках? upd: а заодно какихнить crinklerов/шринклеров?
_________________ привет засранцу лавру :)
|
03 Feb 2017 09:50 |
|
|