0

我正在尝试构建一个 mac(cocoa) 应用程序。我有一个我正在尝试链接的框架,该框架已经为 iOS(armv7 架构)编译。不幸的是,我不再拥有用于编译原始框架的源代码。是否可以更改框架的架构(可能通过反编译然后重新编译)以便可以将其编译到我的可可应用程序中?

到目前为止,我已经研究了 lipo 和 fat 二进制文件以及使用 opttool 进行反编译,但在转换架构方面没有取得任何直接进展。

谢谢你的帮助。

4

2 回答 2

1

理论上,如果代码不直接使用任何 POSIX 系统调用,则可能会创建一个科学怪人的可憎之物:

  • 在 arm64 模拟器上运行代码。
  • 用模拟器陷阱替换所有函数调用链接到 Objective-C 运行时(例如 objc_msgsend)。
  • 如果您发现任何其他函数调用链接,则中止。
  • 对于运行时函数调用,在 x86-64 端调用等效的运行时函数。
  • 对于 alloc 调用,在 arm64 端返回一个 NSProxy 对象,该对象会陷入模拟器。
  • 对于通过参数、返回值或返回参数传递的任何对象,传递一个 NSProxy 对象。

也就是说,在实践中,除非框架非常复杂,否则重写代码会更快。实际上,即使它非常复杂,如果您知道足够多的 arm64 asm 来完成它,您可能可以更快地从 asm 重写它。:-)

于 2017-06-13T19:03:26.727 回答
1

不,没有合理的方法可以自动进行这种转换。大多数 C 反编译器生成的代码是对程序集的非常直译;它通常不适合编译。

(一个很好的反编译器是 IDA Pro 的Hex-Rays插件。但是,它非常昂贵——许可证超过 2000 美元。除非您的框架特别大和复杂,否则不使用此工具可能更具成本效益。 )

如果您真的丢失了源代码,那么您唯一真正的选择就是重写框架。您可以使用反汇编来指导您的工作,但您需要填写一些细节。

于 2017-06-13T18:43:27.070 回答