Изменить имя переменной env внутри библиотеки с помощью шестнадцатеричного редактора?

#c #linux #binary #shared-libraries #hex

#c #linux #двоичный #общие библиотеки #шестнадцатеричный

Вопрос:

Возможно ли изменить имя переменной среды внутри библиотеки с помощью какого-либо редактора. Я думаю, может быть, шестнадцатеричный редактор?

Я хочу изменить имя, но без изменения его длины: envfoobar (9 символов) yellowbar (9 символов)

Очевидно, что перекомпиляция была бы идеальной, но я не знаю, какие именно флаги использовались для компиляции этой библиотеки.

Комментарии:

1. Вы имеете в виду переменную среды (доступную getenv или аналогичную) или глобальную переменную в библиотеке (например, errno в стандартной библиотеке)?

Ответ №1:

Что тебя останавливает? Вы даже можете использовать текстовый редактор (при условии, что это приличный редактор и он знает, как обрабатывать двоичные данные, как это делает vim). Если библиотека ссылается на имя переменной среды через строку, а строка находится в библиотеке в сегменте данных (т.Е. это не строка, созданная во время выполнения), тогда редактировать библиотеку таким образом тривиально. Просто не удаляйте и не вводите новые символы. Я сделал это под Linux. Некоторые другие операционные системы могут подписывать двоичные файлы цифровой подписью и мешать этому работать. Некоторые операционные системы используют стандартную контрольную сумму или хэш, и в этом случае вам придется пересчитать ее заново.

Комментарии:

1. Вы меня опередили, я выполнял реальную работу по своей повседневной работе. Он помечен как linux, поэтому vim должен работать просто отлично.

2. Я использовал GHex, протестировал его, и он работает. Простой поиск и замена сделали свое дело. Спасибо.

Ответ №2:

Если вы можете найти имя с помощью команды strings в библиотеке, это может сработать. Вы могли бы загрузить библиотеку в свой любимый шестнадцатеричный редактор, изменить строку и попробовать.

Это халтурная вещь, но она может сработать. Дайте нам знать.