Comments 7
Есть вартант упаковать все мелкие файлы в один большой zip, и при загрузке извлекать нужный из архива.
Насколько я помню, основная причина введения EXE формата была не совсем для того «чтобы загружать его в произвольное место в памяти», а ограничение 64 килобайта для COM. Всё остальное мы получили «бонусом».
А вообще вы — отчаянные оптимисты. Используя древние средства разработки, да ещё и самостоятельно модифицированные, вы тем не менее с уверенностью смотрите в будущее. Так закладываются бомбы — один разработчик правит линковщик, потом на проект приходит другой разработчик, достаёт неправленную версию и получает граблями по лбу.
По идее это хороший пример того, где надо заранее провести стресс тестирование на предмет исследования лимитов. Скорее всего проблема настигла вас внезапно и на переезд на более современные средства или на 64 бита (где, возможно, этого ограничения нет) просто не было времени.
А вообще вы — отчаянные оптимисты. Используя древние средства разработки, да ещё и самостоятельно модифицированные, вы тем не менее с уверенностью смотрите в будущее. Так закладываются бомбы — один разработчик правит линковщик, потом на проект приходит другой разработчик, достаёт неправленную версию и получает граблями по лбу.
По идее это хороший пример того, где надо заранее провести стресс тестирование на предмет исследования лимитов. Скорее всего проблема настигла вас внезапно и на переезд на более современные средства или на 64 бита (где, возможно, этого ограничения нет) просто не было времени.
Очень странный вы выбрали способ хранения файлов своего формата (ресурсы имели бы смысл если нужны файлы типа как есть известные и ожидаемые windows среди ресурсов (картинки курсоры формочки с кнопочками и т.п.)… реально переинженерили.
Затем преодолевая невероятные трудности, требуя дорогие навыки (отладка и модификация бинарников), совершая подвиги, решили, попутно заложив бомбу замедленного действия в будущем (лет через 5 поддерживать ваш код будет еще сложнее, ведь патченная dll может перестать быть совместимой с самой ОС, а специалиста, способного повторить может уже не быть.
А решение уже описывали ранее на хабре, данные нужно хранить там где они должны — в секции .data (.rodata) приложения
Затем преодолевая невероятные трудности, требуя дорогие навыки (отладка и модификация бинарников), совершая подвиги, решили, попутно заложив бомбу замедленного действия в будущем (лет через 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
Здесь программа может исправлять свои коды и данные (здесь и данные также пишутся в одну секцию с кодами). А вот "ресурсы" здесь неизменяемые, как и таблица настроек.
Sign up to leave a comment.
Как увеличить ресурсы в десять раз