@mIka01

Самомодифицирующийся код на c++ изменяющий значения переменой для нового запуска?

Мне нужно написать простое приложение которое будет хранить некоторые константные переменные. Однако, в результате выполнения программы они могут быть изменены для следующего запуска.

Как изменить значение переменой так что бы при следующем запуске программы она была уже измененной?

Использование сторонних файлов (типа txt) для хранения чего либо для меня запрещено.
  • Вопрос задан
  • 135 просмотров
Пригласить эксперта
Ответы на вопрос 3
BacCM
@BacCM
C++ почти с рождения
Я бы сказал никак. Если любое строннее хранилище запрещено, файлы, реестр, облако и т.д.
В теории можно поправить исполняемый бинарник, но это платформозависимо, и почти нигде нельзя сделать, кроме совсем простеньких операционок.
К тому же к плюсам не относится никак.
Ответ написан
Комментировать
Adamos
@Adamos
Можно выйти из плоскости и, например, вписывать нужные изменяющиеся данные.... прямо в имя файла программы. Переименовывая его нужным вам образом и получая эту информацию стандартным путем из программы ;)
Ответ написан
Комментировать
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
На винде это можно сделать только в виде двух исполняемых файлов. Первый, внешний файл - просто запускает основной второй и ждет, когда он завершится. Когда вызываемый файл завершится, запустивший его может редактироват экзешник. Тут надо разбираться с форматом исполняемых файлов и дальше надо просто переписать байтики в определенной позиции в секции .rdata или что там будет.

Но пользователь всегда может запускать второй файл напрямую. С этой проблемой еще можно как-то бороться если передавать какие-то секретные данные второй программе (основанные на известном состоянии этих меняющихся переменных). И основная программа при запуске должна их проверять. Или можно смотреть информацию о родительском процессе. А еще пользователь может прибить все ваши исполняемые файлы в диспетчере задач одновременно и следующий запуск будет с теми же самыми данными.

В линуксе можно исполняемый файл редактировать, пока он запущен - поэтому там попроще. Чтобы бороться с sigkill стоит редактировать файл в самом начале после запуска.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы