Инструменты пользователя

Инструменты сайта


bbdevpackernohost

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
bbdevpackernohost [2013/12/17 22:16]
admin [Проблема.]
bbdevpackernohost [2020/10/29 07:08] (текущий)
Строка 12: Строка 12:
  
 ===== Герметизация. ===== ===== Герметизация. =====
-При анализе содержимого модуля DevPacker выяснилось, что модуль реализует две основные функции: взаимодействие с пользователем и запись структуры и содержимого упакованных файлов+При взаимодействии //DevPacker// с пользователем создаётся список файлов (его тип платформонезависимая структура //FileList//), который передается записывателю.
-Взаимодействие с пользователем приводит к формированию платформонезависимого списка файлов, который передается записывателю.+
  
-Все работы будут производиться над копией модулей в подсистеме Packed.+Создадим отдельную подсистему //Packed//. Процедуры записи (их логика зависит от структуры исполняемого файла [[http://ru.wikipedia.org/wiki/Portable_Executable|PE EXE]]) отделим в модуль //PackedExeWriter//. Команды упаковки вынесем в модуль //PackedCmds//. Структуру //FileList// переместим в модуль //PackedCore//. Там же объявим записыватель, чей абстрактный метод //PackList// реализуется в //PackedExeWriter//.
  
-Выделим процедуры записи в модуль PackedExeWriter. Даже при отсутствии прямых зависимостей модуля от WinApi или хост-подсистемы этот модуль всё равно зависит от структуры исполняемого файла Windows. Значитплатформонезависимые модули не могут его импортировать напрямую. +Таким образом, функциональность //DevPacker// отделилась от платформозависимых модулей. Модуль //PackedCore// представляет для модуля //PackedCmds// герметичный прикладной слой. 
- +
-Выделим процедуры взаимодействия с пользователем в модуль PackedCmds. Так как структура FileList теперь используется модулем PackedExeWriter, сделаем её экспортированной, а для отделения функций по взаимодействию с пользователем переместим FileList в модуль PackedCore. +
- +
-Чтобы модуль Cmds мог передать список файлов на упаковку, опишем в модуле PackedCore интерфейс записывателя Writer с методом PackList, который будет реализован в PackedExeWriter. Переменная PackedCore.writer типа Writer будет доступна модулю Cmds. +
- +
-Таким образом модуль DevPacker был изолирован от любых платформозависимых модулей при сохранении своих функций, а модуль PackedCore представляет для модуля PackedCmds герметичный прикладной слой. +
  
 ===== Модернизация HostPackedFiles. ===== ===== Модернизация HostPackedFiles. =====
-Изменения структуры DevPacker привели к отделению в отдельный модуль функций записи в исполняемый файл. Этот модуль теперь является реализацией абстрактного интерфейса, следовательно, он может быть измененОднако от него существует имплицитная зависимость в модуле HostPackedFiles.+Модуль //HostPackedFiles// имеет неявную зависимость от алгоритмов //DevPacker// и опирается на эталонный интерфейс //HostFiles//, реализации файловых абстракций //BlackBox//.  
 +Это делает его уязвимым как при смене платформытак и при смене формата записиПоэтому указания на конкретные особенности имеет смысл отделить от остальной логики.
  
-Также модуль  HostPackedFiles опирается на конкретные интерфейсы реализации файловой подсистемы ББ (HostFiles).  +Создадим модуль //PackedWinConst//, который будет содержать необходимую информацию для работы с форматом записи (для эталонной реализации это константы версии и тэга). Эти же константы используем внутри модуля //PackedExeWriter//.
-Это делает его уязвимым как при смене платформы так и при смене формата записи. Для установления связи модуля чтения файлов от модуля записи файлов опишем модуль PackedWinConst, который будет содержать необходимую информацию для работы с форматом записи (для базовой реализации это константа версии и тэга). Эти же константы используем внутри модуля PackedExeWriter.+
  
 ===== Дальнейшее преобразование ===== ===== Дальнейшее преобразование =====
bbdevpackernohost.1387304179.txt.gz · Последнее изменение: 2020/10/29 07:08 (внешнее изменение)