在Linux中查找函数签名

Alo*_*kin 1 c c++ linux bash

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

返回示例:

@_ZN9CCSPlayer10SwitchTeamEi
Run Code Online (Sandbox Code Playgroud)

谢谢.

Mic*_*son 9

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

bash> echo __ZN9CCSPlayer10SwitchTeamEi | c++filt
CCSPlayer::SwitchTeam(int)
Run Code Online (Sandbox Code Playgroud)

反向操作比较棘手,因为CCSPlayer可能是一个命名空间或一个类(我怀疑它们的版本不同).但是,因为你有.so你可以这样做:

bash> nm library.so | c++filt | grep CCSPlayer::SwitchTeam
000ca120 S CCSPlayer::SwitchTeam
bash> nm library.so | grep 000ca120
000ca120 S __ZN9CCSPlayer10SwitchTeamEi
Run Code Online (Sandbox Code Playgroud)

虽然你可能需要小心一些额外的结果.(有时候那些.so文件中有一些有趣的符号)