Найти сигнатуру функции в Linux - PullRequest
1 голос
/ 01 октября 2010

Учитывая файл .so и имя функции, есть ли какой-нибудь простой способ найти сигнатуру функции с помощью bash?

Пример возврата:

@_ZN9CCSPlayer10SwitchTeamEi

Спасибо.

Ответы [ 4 ]

9 голосов
/ 01 октября 2010

Мой компилятор исправляет вещи, немного отличающиеся от ваших (OSX g ++), но меняя ведущий @ на подчеркивание и передавая результат в c ++ filter, я получаю результат, который, я думаю, вам нужен:

bash> echo __ZN9CCSPlayer10SwitchTeamEi | c++filt
CCSPlayer::SwitchTeam(int)

сделать обратное сложнее, поскольку CCSPlayer может быть пространством имен или классом (и я подозреваю, что они искажены по-другому). Однако, поскольку у вас есть .so, вы можете сделать это:

bash> nm library.so | c++filt | grep CCSPlayer::SwitchTeam
000ca120 S CCSPlayer::SwitchTeam
bash> nm library.so | grep 000ca120
000ca120 S __ZN9CCSPlayer10SwitchTeamEi

Хотя вам, возможно, нужно быть немного осторожнее, чтобы получить дополнительные результаты. (Иногда в этих .so файлах есть забавные символы)

2 голосов
/ 02 октября 2010

nm имеет полезный флаг --demangle, который может полностью разобрать ваш .so все

nm --demangle library.so
0 голосов
/ 01 октября 2010
nm -D library.so | grep FuncName
0 голосов
/ 01 октября 2010

Попробуйте

strings <library.so>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...