代码之家  ›  专栏  ›  技术社区  ›  Christopher Pisz

有没有一种方法可以在Linux中扫描已构建的ARM库中的函数?[副本]

  •  1
  • Christopher Pisz  · 技术社区  · 7 年前

    我正在与第三方供应商合作,我怀疑他们要么没有提供我所需的所有库,要么没有设置他们的示例项目以正确链接到所有必需的库。他们刚刚把一个文件夹和项目扔给我。显然,联系他们是一项复杂的任务。所以,在我之前…

    在linux中,有没有一种方法可以扫描目录中所有共享的和静态的arm库以获取函数或方法签名,这样我就可以找到一个可能实现 void foo(int, float); ,以便我可以尝试链接到它并查看它是否解决了我的未解决依赖项?

    我看到一些关于使用nm的帖子,但是我不知道如何在arm库中使用它,也不知道如何搜索特定的函数/方法。

    1 回复  |  直到 7 年前
        1
  •  2
  •   peterh Eli    7 年前

    这个 nm 工具可以扫描单个库的符号。

    用于动态链接的符号与仅用于编译的符号位于不同的表中,因此共享库导出/导入可以由 nm --dynamic 旗帜。

    所有符号都有一个单字节类型标识符,例如 U 指图书馆使用的符号 T 为了它提供的那些。

    在C++的情况下,也有 c++filt 将C++ C++方法名转换为简单ASCII字符串的工具( related answer )中。

    所有这些都最适合于普通的命令行脚本环境。例如,您可以检查 Cica::Cica() 此简单bash脚本在pwd的所有目录结构中的构造函数:

    for l in $(find -name "*.so*")
    do
      echo "$l"
      nm --dynamic "$l"|c++filt|grep -F Cica::Cica
    done