gpt4 book ai didi

c++ - ltrace: 在 "library.so"中找不到 .dynsym 或 .dynstr

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:45:38 27 4
gpt4 key购买 nike

我尝试过使用 ltrace。我尝试使用以下命令来分析程序 sampleapp, ltrace -c -T --library=library.so --output=out 使用的 library.so 文件。 txt ./SampleApp.但它显示上述错误。但是 library.so 是一个调试版本。所以符号表应该在那里。我尝试用 objdump --source library.so | 验证它grep CreateSocket()。它返回使用该 CreateSocket() 函数的代码。这意味着它包含一个符号表。那为什么会出现这个错误呢?

相关帖子:measure CPU usage per second of a dynamically linked library

最佳答案

这取决于可执行文件 SampleApp 的创建方式。如果它是静态链接的,您将看到该错误。 ltrace 仅适用于动态链接的应用程序。

您可以运行 ldd SampleApp 来显示共享对象的依赖关系。它是动态链接的并且依赖于 libc,ldd 的输出将包含如下一行:

libc.so.6 => /usr/lib/libc.so.6 (0x00007fb24ac53000)

在这种情况下,您可以使用 ltrace 选项 --library=libc.so.6 它应该可以工作。但是,--library=libc.so 不会匹配(您不会收到错误,但不会匹配任何库调用)。

静态链接时,ldd SampleApp 将改为显示此输出:

    not a dynamic executable

我的猜测是因为静态链接可能是错误的。 然而,重要的一点是,如果 ltrace 显示此错误,您必须从可执行文件本身(二进制文件)及其创建方式(链接器选项)开始诊断,而不是从共享库开始。

问题How does ltrace (library tracing tool) work?有一些很好的引用资料可以帮助您更多地了解 ltrace 的内部结构。

关于c++ - ltrace: 在 "library.so"中找不到 .dynsym 或 .dynstr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26541049/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com