Что я пытаюсь сделать, это подписать мои 32 байта скомпилированного исполняемого файла с подписями версии, например «1.2.0», и мне нужно изменить эту подпись в времени выполнения, сохраняя в виду, что:Исполнение исполняемого файла и его изменение во время выполнения
- это будет сделано самим исполняемым
- исполняемый находится на стороне клиента, то есть не перекомпиляции можно
- с использованием внешнего файла для отслеживания версий вместо кодирования его сам двоичный файл также не является опцией
- решение должно быть не зависящим от платформы; Я знаю, что Windows/VC позволяет вам выполнить версию исполняемого файла с использованием ресурса .rc, но я не знаю о эквиваленте для Mac (возможно, Info.plist?) И Linux
Решение в моей голове должен был написать подпись версии в первом или последнем 32 байтах двоичного файла (который я не подсчитал , как сделать), а затем я буду изменять эти байты, когда мне это нужно. К сожалению, это не так просто, как я пытаюсь изменить тот же самый двоичный файл, который я выполняю.
Если вы знаете, как я могу это сделать, или более чистого/основного решения для этой проблемы, я был бы очень благодарен. FWIW, приложение - патчер/пусковая установка для игры; Я решил кодировать версию в самом патчере вместо исполняемого файла игры, так как хотел бы, чтобы он был автономным и не зависящим от цели.
Обновление: из ваших полезных ответов и комментариев, я вижу, что беспорядок с верхним/нижним колонтитулом двоичного файла - это не путь. Но в отношении разрешения на запись для работающих пользователей игра должна быть исправлена так или иначе, и файлы игры нужно изменить, нет возможности обойти это: чтобы обновить игру, вам понадобятся права администратора.
Я бы предпочел использовать внешний файл для хранения подписи и модифицировать его при каждом обновлении, но я не вижу, как я могу защититься от подмены пользователя с этим файлом: если они испортили номера версий, как я могу определить, какую версию я запускаю?
Update2: Спасибо за все ваши ответы и комментарии. На самом деле есть два способа сделать это: либо использовать внешний ресурс для отслеживания версии, либо встроить ее в сам файл основного приложения. Я мог выбрать только один ответ на SO, поэтому я сделал ту, с которой я собираюсь, хотя это не единственный. :-)
Вы пытаетесь изменить подпись на диске в памяти? –
Пришло ли вам в голову, что исполняемый файл может использовать эти байты? –
@Seth: На диске, как еще он будет сохраняться после завершения процесса? @Neil: Полностью, вот почему я спрашиваю, могу ли я «зарезервировать» эти байты или указать, где они написаны при компиляции? – amireh