【问题标题】:Is it possible to get function's signature from a library?是否可以从库中获取函数的签名?
【发布时间】:2019-05-31 21:13:32
【问题描述】:

假设 nm 在库 utils 中报告了一个函数符号:

$ nm --defined-only utils.so
T function_symbol

是否可以确定该函数的签名(返回类型和参数)?或者至少是参数的数量和每个参数的大小?

【问题讨论】:

    标签: linux shared-libraries ld nm


    【解决方案1】:

    可以从 DWARF 调试信息中获取此信息。但是如果调试信息不​​可用(因为它已经被剥离或者不是在编译过程中首先生成),这是不可能的。 ELF 对象不包含此信息。

    对于 C++ 函数符号,mangling 显示了函数参数的类型,但即使在那里,也缺少函数结果的类型,所以图片仍然不完整。

    【讨论】:

    • 谢谢。连参数个数都不可用?
    • 是的,参数个数也不可用。
    • 顺便问一下,那么链接器如何确定库是否解析了未定义的符号呢?链接器是否在不知道其类型的情况下匹配未定义符号和已定义符号??
    • 是的,函数符号没有类型检查。 (对于 C++,当然有名称修饰,但这不是链接器需要注意的事情。)
    猜你喜欢
    • 2011-10-16
    • 2017-06-23
    • 2011-05-29
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多