Переименовать ссылочную версию символа в двоичном - PullRequest
1 голос
/ 13 мая 2019

Есть ли утилита для редактирования версии символа в скомпилированном двоичном файле (исполняемая или разделяемая библиотека)?

Например, если у меня есть

> nm a.out
...
                 U powf@@GLIBC_2.27

, я бы хотел изменить егона

> nm a.out
...
                 U powf@GLIBC_2.2.5

Я могу изменить эту версию, добавив

__asm__(".symver powf,powf@GLIBC_2.2.5");

в исходный файл, но я хочу сделать это для двоичных файлов, которые уже скомпилированы.

Редактирование двоичного шестнадцатеричного кода почти работает, но, поскольку требуемая версия символа на 1 символ длиннее оригинала, я могу только заставить его сказать

/usr/lib/libm.so.6: version `GLIBC_2.2.' not found

во время выполнения.

В целом, я пытаюсь сделать двоичный файл, скомпилированный с glibc 2.27+ совместимым со старыми версиями glibc, и если этот метод работает, это будет намного проще, чем другие альтернативы, например, компиляция пользовательского GCC / glibc/ libstdc ++ / инструментальные средства для зависимостей.

...