如何将armv7二进制文件转换为i386 / x86_64

时间:2017-06-13 18:34:09

标签: objective-c macos cocoa cpu-architecture lipo

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

到目前为止,我已经研究过脂肪和脂肪二进制文件以及使用optool进行反编译,但在转换体系结构方面没有取得任何直接进展。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

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

(一个好的反编译器是IDA Pro的Hex-Rays插件。然而,它非常昂贵 - 许可证超过2000美元。除非你的框架特别大且复杂,否则它可能更具成本效益没有这个工具的工作。)

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

答案 1 :(得分:1)

理论上,如果代码不直接使用任何POSIX系统调用,则可能会创建一个Frankensteinian憎恶:

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

也就是说,实际上,除非框架非常复杂,否则重写代码会更快。而且实际上,即使它非常复杂,如果你知道足够的arm64 asm来关闭它,你可以更快地从asm重写它。 : - )