在Linux中查找函数签名

时间:2010-10-01 07:59:58

标签: c++ c linux bash

给定.so文件和函数名称,是否有通过bash查找函数签名的简单方法?

返回示例:

@_ZN9CCSPlayer10SwitchTeamEi

谢谢。

4 个答案:

答案 0 :(得分:9)

我的编译器会破坏你的东西(OSX g ++),但是将你的前导@改为下划线并将结果传递给c ++ filt会给我一些我认为你想要的结果:

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文件中有一些有趣的符号)

答案 1 :(得分:2)

nm有一个有用的--demangle标志,可以一次性解码你的.so

nm --demangle library.so

答案 2 :(得分:0)

尝试

strings <library.so>

答案 3 :(得分:0)

nm -D library.so | grep FuncName