Можно ли сохранить переменную внутри и прочитать / записать ее после завершения работы программы?

Я искал некоторое время без надежды.
По сути, мне было интересно, можно ли сохранить переменную и прочитать ее внутри исполняемого файла после выхода из программы.

Я знаю, что можно использовать функцию fstream для хранения переменной во внешнем файле, но я ищу способ сохранить ее внутренне, как в .exe.

string l;
cin >> l;
// function to save it internally.....

Заранее спасибо o.o

0

Решение

Вот несколько советов о том, почему это не очень хорошая идея.

  • Это не лучше, чем использование другого файла.
    • Вы не можете получить доступ к большому блоку памяти как «все мои данные» и записать его в файл, поэтому вам придется правильно сериализовать / десериализовать. Если у вас есть этот код доступен, он на самом деле Больше работать со сложным форматом файла (будь то ELF или же PE), чем запись в пустой файл.
  • Это на самом деле хуже.
    • Ошибки в записи данных могут сделать вашу программу неработоспособной.
    • Несколько пользователей не могут иметь свои собственные данные.
  • Ваш исполняемый файл обычно не доступен для записи.
    • В системах на основе Unix двоичные файлы обычно устанавливаются в системные каталоги, и обычный пользователь просто не может их изменить.
    • Даже если вы работаете от имени пользователя root, системный раздел нередко доступен только для чтения (моя собственная настройка / например, монтируется только для чтения).
    • В системах Windows, хотя чаще используется с правами администратора, это не универсально, и, в любом случае, двоичный файл работающей программы заблокирован.
  • Даже если вам удастся обойти все это, это предотвратит переносимость данных.
    • Установка и обновление вашей программы и данных больше нет.
    • Невозможно сделать резервную копию ваших данных и восстановить их позже (возможно, в другой системе).
  • В те дни единственными программами, изменяющими исполняемые файлы, являются вредоносные программы. По этой причине перехват исполняемых программ, изменяющих исполняемые файлы, и их отключение является одной из основных функций антивирусного программного обеспечения.
    • Кроме того, в системе, реализующей двоичный файл с подписью или любой другой тип системы доверия, ваш измененный двоичный файл не пройдет тесты на подпись.

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

4

Другие решения

Как упомянуто @drescherjm и @Peter в комментариях, такая практика — это то, что ищет программное обеспечение безопасности, так что это не самая лучшая идея.
Я не очень осведомлен о ваших намерениях, но если вы пытаетесь реализовать сопрограммы в своих программах, вот что вы можете сделать:

  • Создать статический переменная, скажем static int state=0;и используйте это для реализации сопрограмм в масштабе времени жизни программы.
  • Используйте файл, скажем «Sys_Status.dat» для хранения информации этих переменных.
0

По вопросам рекламы [email protected]