Изменение имен символов после связывания

Можно ли взять статический объект и переименовать символы так, чтобы это не нарушало вызовы функций?

Например, если у нас есть статический объект, содержащий две функции:

void A()
{
  //Do stuff
}

а также

void B()
{
  A();
}

Предполагая, что это внешне объявленные функции C, тогда .so будет содержать два символа - A и B. Есть ли способ переименовать A -> funcA и B -> funcB?

(Вторая часть вопроса, касающаяся вызовов функций, основана на моей наивности в отношении связывания, если вы просто измените имя, вызовы функций прервутся или нет?)

P.S. Платформа - linux, вероятно, скомпилированная с помощью gcc, но если есть способ кросс-компилятора, я был бы рад этому!


person VolatileStorm    schedule 25.08.2011    source источник
comment
Почему вы не можете просто переименовать их в то, что хотите, перед компиляцией кода?   -  person karlphillip    schedule 25.08.2011
comment
Поскольку в реальной жизни ситуация не такая четкая, как в примере - я хочу переименовать КАЖДЫЙ символ в библиотеке (ну, те, которые я закодировал). Так что это будет чертовски много поиска и замены. Этот поиск и замена в конечном итоге приведет к запутыванию кода, который мне не нужен (однако я хочу иметь возможность связать их странным образом по моим собственным причинам).   -  person VolatileStorm    schedule 26.08.2011


Ответы (1)


См. man-страницу утилиты objcopy, в частности параметр --redefine-syms.

person zvrba    schedule 25.08.2011