我创建了一个测试应用程序,然后导出为 IPA 文件。我使用 IDA pro 查看可执行二进制文件。我发现main函数是由start subsroutine调用的:
BLX _main
所以我得出结论,一个 mach-o 可执行文件的入口点是 start 子程序,它最终会调用 main 函数。
但是,当我尝试打开其他应用程序的可执行文件(我使用 Clutch 抓取的)时,我发现根本没有 _main 函数,而是类似 sub_2A4C 之类的东西。
我想知道为什么会有这样的差异?
最佳答案
你的结论不对。入口点确实是 start 子例程,start 子例程最终会调用您代码中声明的 main 函数也是如此。但是,如果您在 Xcode build设置中的“部署后处理”选项和“剥离链接产品”选项中选择"is",您的符号将被 strip 化,因此您将不再将主函数视为 _main,而是被混淆,例如 sub_2A4C。
关于没有main函数的iOS可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15892395/