代码之家  ›  专栏  ›  技术社区  ›  Alon Gubkin

在Linux中查找函数签名

  •  1
  • Alon Gubkin  · 技术社区  · 14 年前

    给定一个.so文件和函数名,有没有简单的方法可以通过bash找到函数的签名?

    返回示例:

    @_ZN9CCSPlayer10SwitchTeamEi
    

    谢谢您。

    4 回复  |  直到 14 年前
        1
  •  9
  •   Michael Anderson    14 年前

    我的编译器把东西和你的(OSX G++)稍微不同,但是把你的引号改成一个下划线,然后把结果传递给C++。

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

    反向操作更复杂,因为ccsplayer可能是一个名称空间或一个类(我怀疑它们的损坏方式不同)。但是,既然您有了,那么您可以这样做:

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

    尽管你可能需要对获得一些额外的结果小心谨慎。(里面有一些有趣的符号,所以有时会有文件)

        2
  •  2
  •   Paul Rubel    14 年前

    NM有一个很有用的——去散乱的旗子,可以把你的旗子去散乱。

    nm --demangle library.so
    
        3
  •  0
  •   Raghuram    14 年前

    尝试

    strings <library.so>
    
        4
  •  0
  •   shodanex    14 年前
    nm -D library.so | grep FuncName