如何在共享库中找到 C++ isfinite() 的解析位置?

Posted

技术标签:

【中文标题】如何在共享库中找到 C++ isfinite() 的解析位置?【英文标题】:How to find where C++ isfinite() is resolved from in shared libraries? 【发布时间】:2013-10-17 19:28:25 【问题描述】:

我正在尝试查找为 C++ 应用程序定义 isfinite() 的位置。我一直在共享库上运行nmgrepisfinite,也递归地在共享库的共享库上运行,但到目前为止还没有找到为isfinite 提供定义的库,但我的应用程序解析符号并运行。是否有一个 linux 工具可以计算为特定可执行文件解析符号的库?

【问题讨论】:

这是一个数学库函数。使用 -lm 编译时会找到(默认情况下)。符号从 libm.a 中删除。 尝试打开编译器/链接器上的映射文件选项。这通常会列出程序中每个符号的详细信息。对于 Gcc,它类似于:-Xlinker -Map=mymapfile.txt @user2784234 我认为 strip 意味着删除 debuginfo 但不是符号。 【参考方案1】:

如果您在任何模块中都找不到该符号,则很可能 isfinite 是宏而不是函数。 我认为将库函数实现为宏是合法的。 您可以反汇编调用此函数的代码并找出答案。

【讨论】:

以上是关于如何在共享库中找到 C++ isfinite() 的解析位置?的主要内容,如果未能解决你的问题,请参考以下文章

从堆栈跟踪中查找共享库中的源代码行

在 Boost Property 树库中,我如何以自定义方式处理文件未找到错误(C++)

C++ 静态库中的共享全局变量

C++:动态共享库中的虚函数产生段错误

C++ 静态库中的共享全局变量:Linux

如何将 #defines 从 C++ 共享库导出到应用程序