Было бы гораздо легче ответить на этот вопрос, если вы могли бы описать то, что вы пытаетесь достичь, а не конкретный механизм, который вы планировали достичь.
Изменение действующего исполняемого файла обычно предотвращается современными операционными системами и по уважительным причинам (безопасность, целостность и т. Д.). И модификация исполняемого файла на диске также нецелесообразна, по тем же причинам. Я уверен, что есть другие способы достичь желаемого, не прибегая к самомодифицируемому коду.
У меня есть код с символьным массивом, инициализированный «hello world». Я хотел бы знать, есть ли возможность повторной инициализации этого массива символов при каждом выполнении кода, строка.
Да, это возможно, но вы должны были бы дать пользователю доступ на запись в исполняемый файл, чтобы сделать это, найти правильное смещение в двоичном, пропатчить файл и сохранить его нетронутым атомарно, и т.д., и т.д. Есть много способов, чтобы это могло пойти не так. Не делайте этого таким образом.
Вместо статически выделенной строки в th e, просто иметь отдельный файл ресурсов, который содержит строку (строки) и любое другое состояние. Вы можете изменить этот файл ресурсов (файл INI, файл данных, что угодно), чтобы изменить строку как и когда требуется (или даже удалить ее). Чтобы обеспечить безопасность, вы можете в цифровой форме подписать файл, который позволяет проверить, что содержимое является законным. Если подпись не удалась, программное обеспечение может отказаться от работы. Вы также можете зашифровать содержимое, чтобы он не мог быть прочитан любознательным пользователем. (Если они не удобны с отладчиком!)
Если нет C, могу ли я узнать, возможна ли такая реализация на любом другом языке программирования?
Это в основном ограничение по ОС, в том числе и обычный пользователь будучи в состоянии написать установленного приложения в системной папке (как правило, что-то вы не хотите разрешить). И если вы не можете сделать это на C, вы, вероятно, не сможете это сделать на другом языке!
После выполнения этого кода один раз я хочу, чтобы массив char c был автоматически инициализирован какой-либо другой случайной строкой (а не «hello world»), и это должно быть постоянным изменением. ... Могу ли я узнать, возможно ли такое?
Да, но используйте отдельный файл, как описано выше. Не изменяйте сам исполняемый файл.
Эта потребность по соображениям безопасности.
Причина, по которой самомодифицирующийся код не разрешен в первую очередь из соображений безопасности. Если вы пытаетесь реализовать какую-то защиту от копирования, вам следует исследовать существующие методы и инструменты и передовые методы, а возможно, даже использовать готовое решение. Это сложно, и есть люди, которые взламывают программное обеспечение для развлечения, которое может легко обойти все, кроме самых сложных схем защиты.
Если нет, могу ли я узнать, можно ли самокортировать код после его выполнения один раз?
Возможно, вы можете удалить исполняемый файл, но для этого обычно требуются также повышенные привилегии.
Просто попросите программу проверить подпись в файле ресурсов и отказаться от ее запуска, если она недействительна.
Это зависит от операционной системы. Некоторые операционные системы отмечают запрет на запись исполняемого исполняемого файла. –