Mach-O文件LC_FUNCTION_STARTS加载命令

时间:2012-03-07 13:31:22

标签: macos mach-o dyld

有没有人知道Mach-O LC_FUNCTION_STARTS命令所指向的数据格式是什么?

我能找到的最多信息是在loader.h头文件中:

#define LC_FUNCTION_STARTS 0x26 /* compressed table of function start addresses */

我看到dyldinfo工具有一个-function_starts选项来分析这些数据并且该工具是开源的,但该工具的最新发布版本不包含支持:

http://opensource.apple.com/source/ld64/ld64-97.2/src/other/dyldinfo.cpp

有谁知道我在哪里可以获得最新版dyldinfo的来源,或者我可以获得有关此加载命令的更多信息?

谢谢!

2 个答案:

答案 0 :(得分:9)

工具使用它来表示崩溃日志,样本,spindump等中的地址,以确定给定地址是否属于函数内部。调试器也可以帮助他们更快地找到给定地址所在函数的边界。

此部分中的数据被格式化为零终止的DWARF-style ULEB128值序列。第一个值是从__TEXT段开始到第一个函数开始的偏移量。其余值是下一个函数开始的偏移量。

答案 1 :(得分:0)

由于我在几天内没有得到任何额外的答案或评论,我想我也可以自己回答这个问题。解决方案基本上就是我在上面的评论中提出的:

最新版本的dyldinfo位于:

http://opensource.apple.com/source/ld64/ld64-127.2/src/other/dyldinfo.cpp

然而,我仍然没有弄清楚函数的确切用途是什么,如果有人有信息,我仍然会欣赏它。