У меня странный вопрос, мне интересно, есть ли способ добавить / отредактировать строку (или что-то, что может быть доступно через программу C (внутри, то есть не внешний файл)) после того, как она была скомпилирована?
Цель состоит в том, чтобы изменить URL-адрес в программе Windows через PHP в Linux (очевидно, я не могу просто скомпилировать его).
Многие платформы posix поставляются с программой strings
который будет читать двоичный файл в поисках строк. Существует возможность распечатать смещение строк. Например:
strings -td myexec
Оттуда вы можете использовать шестнадцатеричный редактор, но главная проблема в том, что вы не сможете сделать строку больше чем это уже есть.
Шестнадцатеричный редактор — это, вероятно, ваш лучший выбор.
Будет работать шестнадцатеричный редактор, но вы должны быть осторожны, чтобы не изменить размер исполняемого файла. Если строка находится в файле .res, вы можете использовать ResEdit.
Существуют специализированные инструменты для изменения существующих исполняемых файлов. Известный инструмент
Resource Tuner, который может быть использован для редактирования всех видов ресурсов в исполняемом файле.
Другой вариант — использовать текстовый редактор, например Мастерская Hex, редактировать символы в строках исполняемого файла. Однако имейте в виду, что с помощью этого метода вы можете редактировать только существующие строки в исполняемом файле, а длина замещаемых строк должна быть равной или меньшей длины, чем исходные, в противном случае вы в конечном итоге измените исполняемый код.
Как предлагали другие, вы можете использовать редактор двоичных файлов (hex Editor), чтобы изменить строку в исполняемом файле. Вы захотите встроить в строку маркер (уникальную последовательность байтов), чтобы найти строку в своем файле. И вы захотите убедиться, что вы читаете / пишете файл с правильными смещениями.
Поскольку OP заявил, что планирует использовать PHP на linux для перезаписи файла, вам нужно будет использовать fseek, чтобы поместить указатель файла в начальное положение этой строки URL-адреса, убедиться, что вы остаетесь в пределах размера строки при замене байтов, а затем используйте fseek / rewind и fwrite, чтобы изменить файл.
Этот метод можно использовать для изменения URL-адреса, встроенного в двоичный файл, и также для встраивания лицензионного ключа в двоичный файл или для встраивания значения контрольной суммы приложения в двоичный файл, чтобы можно было определить, когда двоичный файл изменился. ,
Как предлагали некоторые авторы, вам может понадобиться пересчитать контрольную сумму или заново подписать двоичный файл. Быстрый способ проверить это — скомпилировать две версии вашего двоичного файла с разными значениями URL. Затем сравните файлы и посмотрите, есть ли различия, кроме значений URL.
Нет, если вы не хотите копаться в сгенерированном шестнадцатеричном или ассемблерном коде.