C ++ Win32 заменить строки в исполняемом файле - PullRequest
1 голос
/ 27 ноября 2010

Я ищу хороший способ заменить несколько строк в собственном скомпилированном exe win32. Например, в моем коде есть следующее:

const char *updateSite = "http://www.place.com"
const char *updateURL  = "/software/release/updater.php"

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

Спасибо!

Обновление : Я нашел некоторый код в проекте Metasploit, который, кажется, делает это: MSF: Util: Exe

Ответы [ 3 ]

4 голосов
/ 27 ноября 2010

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

Может выглядеть так:

> BINARY DATA
> ZIP FILE DATA
> 32bit unsigned int which's value is the size of the appended zip file

Плюсы:

  • легко расширять / поддерживать
  • вы не связываетесь с самим exe
  • вы можете положить туда много вещей

Против:

  • Вам нужно связать некоторое сжатие lib

Если вы не хотите его архивировать, просто напишите несколько простыхнесжатый архив вещь твоя собственная.

1 голос
/ 27 ноября 2010

В PE-файле находится таблица глобальных перемещений - это список адресов (например, глобальные переменные или константы, которые должны храниться во время выполнения, например, строки), которые должны быть изменены загрузчиком PE.Если вы знали, какой записью является данная переменная, вы можете получить ее адрес, а затем изменить ее вручную.Тем не менее, это будет полная сучка, и вам потребуется глубокое знание вашего любимого компилятора и формата PE.Проще просто использовать XML, Lua или что-то еще, что полностью переносимо - они были изобретены именно для этой цели.

Редактировать:

Почему бы просто не использовать const char **?Что-то не так с тем, что это нормальная переменная времени выполнения?

0 голосов
/ 27 ноября 2010

IMO лучшее место для хранения этих строк в ресурсе таблицы строк.Он включен в ваш файл .EXE, поэтому переносимость не будет нарушена.

Используйте редактор Visual Studio для изменения этих значений.

Используйте LoadString WinAPI или лучше, CString :: LoadString в вашем коде для загрузки значений.

Существует также программное обеспечение сторонних производителей, позволяющее вам изменять строки в скомпилированном .EXE без перекомпиляции.

...