2017-06-13 98 views
0

我正在嘗試構建一個mac(可可)應用程序。我有一個框架,我試圖鏈接到已編譯爲iOS(armv7拱門)。不幸的是我不再擁有我用來編譯原始框架的源代碼。是否有可能改變框架的架構(可能通過反編譯然後重新編譯),以便它可以編譯到我的可可應用程序中?如何將armv7二進制文件轉換爲i386/x86_64

到目前爲止,我已經研究過lipo和fat二進制文件以及使用optool進行反編譯,但是沒有對轉換架構做任何直接的改進。

感謝您的幫助。

回答

1

不,沒有合理的方法來自動執行此轉換。大多數C反編譯器生成的代碼是程序集的一個非常直接的翻譯;它通常不適合編譯。

(一個好的反編譯器是0123A插件,但是它非常昂貴 - 許可證超過了2000美元,除非你的框架特別龐大和複雜,否則在沒有這個工作的情況下工作可能更具成本效益工具)。

如果你確實丟失了源代碼,你唯一真正的選擇就是重寫框架。您可以使用反彙編來指導您的工作,但您需要填寫一些細節。

1

從理論上講,如果代碼中不使用任何POSIX系統直接調用,有可能創建一個Frankensteinian憎惡

  • 運行上的arm64仿真器的代碼。
  • 用模擬器陷阱替換所有函數調用鏈接到Objective-C運行時(例如objc_msgsend)。
  • 如果發現任何其他函數調用鏈接,則中止。
  • 對於運行時函數調用,請調用x86-64端的等效運行時函數。
  • 對於alloc調用,返回陷入模擬器的arm64端的NSProxy對象。
  • 對於通過參數,返回值或返回參數傳遞的任何對象,傳遞一個NSProxy對象。

這就是說,在實踐中,除非框架非常複雜,否則重寫代碼會更快。實際上,即使它非常複雜,如果你知道有足夠的arm64 asm來解決這個問題,你也可以更快地從asm中重寫它。 :-)

+0

不,請不要 – tbodt

+0

聽起來非常困難,我會重寫它:p – user1320885

+0

瘋狂。就像你要做的事情來證明這是可能的,但絕不會在一百萬年內出貨。 :-D – dgatwood

相關問題