Как стать автором
Обновить

Комментарии 7

Есть вартант упаковать все мелкие файлы в один большой zip, и при загрузке извлекать нужный из архива.

Насколько я помню, основная причина введения EXE формата была не совсем для того «чтобы загружать его в произвольное место в памяти», а ограничение 64 килобайта для COM. Всё остальное мы получили «бонусом».

А вообще вы — отчаянные оптимисты. Используя древние средства разработки, да ещё и самостоятельно модифицированные, вы тем не менее с уверенностью смотрите в будущее. Так закладываются бомбы — один разработчик правит линковщик, потом на проект приходит другой разработчик, достаёт неправленную версию и получает граблями по лбу.

По идее это хороший пример того, где надо заранее провести стресс тестирование на предмет исследования лимитов. Скорее всего проблема настигла вас внезапно и на переезд на более современные средства или на 64 бита (где, возможно, этого ограничения нет) просто не было времени.
Очень странный вы выбрали способ хранения файлов своего формата (ресурсы имели бы смысл если нужны файлы типа как есть известные и ожидаемые windows среди ресурсов (картинки курсоры формочки с кнопочками и т.п.)… реально переинженерили.

Затем преодолевая невероятные трудности, требуя дорогие навыки (отладка и модификация бинарников), совершая подвиги, решили, попутно заложив бомбу замедленного действия в будущем (лет через 5 поддерживать ваш код будет еще сложнее, ведь патченная dll может перестать быть совместимой с самой ОС, а специалиста, способного повторить может уже не быть.

А решение уже описывали ранее на хабре, данные нужно хранить там где они должны — в секции .data (.rodata) приложения
Используйте промышленную библиотеку sqlite3.dll и положите статические данные в ее файл БД. Не пожалеете.

А возможно ли сейчас EXE-шнику что-то исправлять в самом себе? Конкретно — свои настройки или вообще код, чтобы не хранить настройки в отдельном файле. Современные ОС позволяют ли такое?

Разумеется позволяют. Правда, это зависит от того, как редактор связей оформляет секции в exe-файле, например:

Object table:
#   Name              VirtSize    RVA     PhysSize  Phys off  Flags
--  --------          --------  --------  --------  --------  --------
01  .PROGRM           00A64F00  00001000  00A64F00  00000200  E8000020 [CEPRW]
02  .rsrc             00324200  00A66000  00324200  00A65200  42000040 [DIR]
03  .reloc            0002D3F0  00D8B000  0002D3F0  00D8A200  42000040 [DIR]

Key to section flags:
  C - contains code
  D - discardable
  E - executable
  I - contains initialized data
  P - may not be paged
  R - readable
  W - writeable

Здесь программа может исправлять свои коды и данные (здесь и данные также пишутся в одну секцию с кодами). А вот "ресурсы" здесь неизменяемые, как и таблица настроек.

Спасибо, надо поэкспериментировать. Наверно, антивирусы с ума сойдут :)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории