提取Objective-C二进制文件
是否有可能提取二进制文件,以获取二进制文件后面的代码? 使用类转储可以看到实现地址,但是是否也可以看到实现中的代码? 有没有办法做到这一点?
所有代码都会编译为单个指令,放在可执行文件的文本部分。 编译器负责将您的高级语言翻译成更简单的处理器特定指令。 除非代码很简单,否则恢复这个过程几乎是不可能的。 一些问题是语句不明确,整体可读性:例如,局部variables只是一个偏移地址。
如果你想读取反汇编的代码(上级代码被编译成的指令),在可执行文件中使用这个命令:
otool -tV
file
你可以反编译(更准确地说,反汇编)一个二进制文件,并得到它的程序集,但是没有办法找回最初的Objective-C。
我的好奇心让我问你为什么要这样做?
otx http://otx.osxninja.com/是一个很好的工具,用于表示基于otool的反汇编。它将处理x86_64和i386反汇编。
和
Mach-O-Scope https://github.com/smorr/Mach-O-Scope是一个build立在OTT之上的工具,将其全部转储到sqlite3数据库中进行浏览和注释。
它不会给你原始的来源 – 但它会让你非常接近,为你提供在方法中发送的消息。