Подскажите пожалуста, как сделать, переменную в экзешнике, которая при выключении запоминает свое последнее состояние и при новом запуске программы работает уже с этим значением, а не тем , которое было в момент компиляции. Если можно, закиньте простенький примерчик на масме
Возможно, если прога поменяет переменную в .exe на HDD Предполагаю, что прога может загрузиться в RAM, потом закрыть или как-то уничтожить хэндл файла, с которого запускалась или что-то там еще, что удерживает файл от изменения при его использовании другими процессами, а потом спокойненько открыть свой же файл, найти там переменную,поменять и сохранить Собственно , надо знать api , которая разблокирует файл для изменения, если такая конечно есть и так чтоб сама выполняющаяся прога при этом не навернулась))) Иначе придется придумывать извращения типа:"прога копирует свой файл под другим названием, изменяет его, запускает, закрывает себя, "новая" прога (уже с измененной переменной) опять копирует себя под именем, которое было раньше, запускает уже тот процесс, закрывает себя, а уже новый процесс удаляет наш временный новый")))))))
Не то, надо чтоб экзешник сам себя разблокировал и подправил. И это можно сделать, потому что анлокер вполне спокойно перемещает экзешник работающей проги и прога при этом продолжает работать как ни в чем не бывало. Потому и обратился за помощью к ассемблерщикам, а не школьникам-паскальщикам.
ivandry В пределах логического тома перемещайте сколько угодно без "разблокирования" с помощью MoveFile.
самого себя не так легко удалить/изменить в рантайме... самое простое - переименовать текущий файл, а на его имя записать измененный... или работать со своими ресурсами...
проинициализируй переменную файлового смещения одним dword-овым значением 12345678h, переменную счётчика другим значением 09ABCDEFh, после компиляции найди получившееся файловое смещение счётчика (09ABCDEFh) и подставь его значение вместо 12345678h => PROFIT
Спасиба А насчет ресурсов. Может, можна как-то задать там что-то, а потом при выполнении это нечто изменить, чтоб так насовсем и осталось?
BeginUpdateResource, UpdateResource, EndUpdateResource http://msdn.microsoft.com/en-us/library/ff468902(v=vs.85).aspx
об анлокере, насколько я помню, он делает это через перечисление _SYSTEM_HANDLE и штурмом овнершипа(не нашёл подходящего русского слова), как и ProcessExplorer, по крайней мере до недавних пор.
Видел даже (стартует первый процесс, читает из ресурсов, записывает, запускает второй, закрывается; второй меняет файл) Да реализуемо, но • Programm Files - доступ с правами администратора на запись, • нужны будут дополнительные права для работы программы, • есть возможность повредить код и получить непредсказуемые результаты, • трудно будет отличить изменения от повреждений, • БСОД если будет некорректность в драйвере (вопрос будет ли запускаться) а В общем нестабильная, небезопасная и подозрительная штука. Серьезные разработчики подписывают свои программы и препятствуют изменению программы.
Вооо...этот вопрос меня всегда интересовал. Ведь реально столько раз есть необходимость в качестве настроек программы юзать одно или два значения типа int. При этом можно даже найти сами переменные в файле образа и конкретно их изменить. Я кажется создавал тут уже тему с таким вопросом. Правда я тогда не думал о ресурсах, желание было получить в процессе дескриптор файла-образа с правом на запись...