IPB

Добро пожаловать, гость ( Вход | Регистрация )

8 Страниц V « < 6 7 8  
Reply to this topicStart new topic
> Delphi, Asm, C, WinAPI, PHP, ..., FAQ
-=CHE@TER=-
Oct 27 2016, 15:59
Сообщение #141


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,107
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 268 раз(а)



Отличный пример наглядно иллюстрирующий почему если ты не чистишь память сразу после выделения (или не выделяешь с флагом автоматической очистки типа HEAP_ZERO_MEMORY / LMEM_ZEROINIT / GMEM_ZEROINIT и т.п.), то ты - баобаб.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
-=CHE@TER=-
Nov 23 2016, 15:03
Сообщение #142


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,107
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 268 раз(а)



QUOTE(-=CHE@TER=- @ Feb 13 2014, 14:49) *
Натолкнулся на то, что в нескольких играх используется LZSS, описанный в моём сообщении выше.
Но, есть одно отличие MS-LZSS (Microsoft LZSS) от классического LZSS (который, похоже, используется во многих играх), без которого на выходе получится не файл, а что попало.
Нашёл ещё одну вариацию - применялась в старых играх от Blizzard:
- Warcraft: Orcs and Humans
- Blackthorne
- Lost Vikings
В ближайшее время распаковщик на сайт добавлю (там нет имён и через флаги у размера / смещения файла определяется сжат он или нет). Кому интересно, описываю изменения в том алгоритме что я приводил ранее.

Вот эти строки:
CODE
FillChar(buff[0], $FFF + 1, 32);
I:=($FFF + 1) - 16;
...
J:=J + ((Len And $F0) ShL 4);
Len:=(Len And $0F) + 3;

Заменяются этими:
CODE
FillChar(buff[0], $FFF + 1, 0);
I:=0;
...
J:=J + ((Len And $0F) ShL 8);
Len:=((Len And $F0) ShR 4) + 3;

И всё.


Спасибо сказали:
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
-=CHE@TER=-
Jan 29 2017, 19:55
Сообщение #143


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,107
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 268 раз(а)



AsmBB
Форум написанный на FASM. Нет, вы не ослышались. Да, это Assembler.
Дизайн дикий, функционал скромный, но идея интересная - наверняка потом в какой-нибудь KolibriOS интегрируют. (*улыбается*)
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Siberian GRemlin
Feb 27 2017, 09:33
Сообщение #144


Advanced Member
***

Группа: CTPAX-X
Сообщений: 450
Регистрация: 4-February 08
Пользователь №: 2
Спасибо сказали: 181 раз(а)



Установил игру на 64-разрядную систему. Программа устанавливается через 32-разрядную InstallShield 11.0, но каким-то образом пишет данные в область реестра доступную только 64-разрядным приложениям. Например, создаёт ветку, которая в 64-разрядном редакторе реестра доступна, а в 32-разрядном отсутствует.
CODE
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-21-3391727471-1739702130-609907194-1000\Components\66EEC61806F24F94D949A665B121C141


Таким образом, я из своего 32-разрядного приложения не могу получить путь к установленной игре, так как это единственное место в системе, где он указывается. Игра, кстати, 2006 года и 32-разрядная.

Кто-нибудь сталкивался с такой проблемой? Предполагаю, что решение существует, но не могу корректно сформулировать поисковый запрос.

Добавлено.
Нашёл кривое решение через экспорт ветки в файл, который нужно затем читать.
CODE
REG.EXE export HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-21-3391727471-1739702130-609907194-1000\Components\66EEC61806F24F94D949A665B121C141 test.reg


Добавлено позже.
Похоже, из 32-разрядного приложения вызывается только 32-разрядная версия REG.EXE со всеми вытекающими. Идиотство.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
-=CHE@TER=-
Feb 28 2017, 08:16
Сообщение #145


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,107
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 268 раз(а)



Переместил твоё сообщение в более подходящую тему.
Как я понял, тебе поможет KEY_WOW64_64KEY при вызове RegOpenKeyEx().
Обрати внимание, что эта штука не будет работать под Windows 2000.
Ещё снизу см. Note - есть другой способ без флагов, но "it's stable but it should be considered an implementation detail subject to change".
Такие дела.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
-=CHE@TER=-
Jul 2 2017, 14:16
Сообщение #146


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,107
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 268 раз(а)



Может кому пригодится: libunpak.zip (~16 Kb)
Библиотека для Delphi 7, где я собрал бинарники для последних:
- puff() из zlib (распаковывает deflate)
- blast() из zlib (распаковывает PKWARE)
Теперь это библиотека, с небольшой обёрткой, которая позволяет работать обоим алгоритмам с памятью, а не жёстким диском. Плюс к blast() добавил интерфейс, так что он теперь тоже может возвращать необходимый размер буфера для распаковки. Давно хотел такую штуку для Delphi, без всяких зависимостей от "msvcrt.dll" и прочего мусора.
Также в архиве программа-пример и два файла "deflate.dat" и "pkware.dat" на которых можно потренироваться.
Через дефайны: NO_DEFLATE или NO_PKWARE можно убрать ненужные алгоритмы, для уменьшения размера.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

8 Страниц V « < 6 7 8
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0 -

 



Упрощённая версия Сейчас: 18th October 2017 - 14:53