ARM反汇编器/交叉编译器,用于检查iOS编译

5
有人能推荐以下两个东西吗:
  • 一个可以运行在Windows或者MacOS上的ARM反汇编器,最好能够理解iOS所使用的可执行文件格式。
  • 在MacOS中,一种可以直接从命令行调用XCode安装的交叉编译GCC的方法(这样我就可以运行它在一个小测试文件上并要求输出汇编代码)。
基本上,我对于想要看到XCode/gcc如何为ARM/iOS编译某些东西来帮助我进行优化非常感兴趣。正如你所看到的,虽然我有Windows和Linux背景,但我不是Mac专家,所以我对XCode安装了所有的东西或者iOS使用的任何二进制格式都不太熟悉。
我并不特别关心我必须在Mac OS或者Windows下进行“反汇编”,但我试图避免的是安装一个新的GCC配置成交叉编译到ARM,因为XCode可能已经有一个完美的安装在那里了... 任何帮助都将不胜感激。
6个回答

5
你可以始终使用otool反汇编器。它相当基础,但能够胜任工作。 IDA Pro 可以反汇编用于iOS的ARM Mach-O文件。在我有偏见的观点中,使用它比查看死代码清单更好。你可以通过演示版本检查它的工作原理。
免责声明:我为Hex-Rays工作。 IDA Pro disassembling an ARM Mach-O file

谢谢,但据我所知,IDA Pro的演示版本只能反汇编Windows可执行文件,对于其他类型的文件可能不支持。 - Neil Coffey
谢谢你提到otool,我觉得这可能会给我所需的东西! - Neil Coffey
2
演示版本可以处理x86和ARM的EXE、ELF和Mach-O格式。 - Igor Skochinsky
1
请注意「演示版」和「免费版」之间有所区别。据我所知,免费版仅支持x86,而演示版则包含ARM版本。 - CatShoes

4
一个可以在Windows或MacOS上运行的ARM反汇编器,理想情况下能够理解iOS使用的可执行文件格式。
我可以建议您使用LLVM。如果使用默认选项构建,则llvm-objdump将对ARM进行反汇编。
此外,看起来http://developer.apple.com/technologies/tools/whats-new.html苹果正在iOS SDK中使用LLVM工具链。

2

在Xcode中已经内置了ARM交叉编译工具链。您可以使用已经内置在Xcode中的gdb调试器支持,在源代码和ASM级别上调试iOS应用程序。例如,打开您的iOS应用程序并选择“设备”和“调试”。然后在源代码的一行上设置断点,并运行程序直到遇到断点。现在从菜单中选择“运行 -> 调试器”。当调试器显示时,选择“运行 -> 调试器显示 -> 源代码和反汇编”,您将看到右侧显示生成自源代码的ARM汇编代码的窗口。您可以使用按钮逐个源代码行遍历代码。如果您想逐个ARM汇编指令步进,请打开gdb控制台并使用“stepi”指令(输入一次,然后只需按Enter键重复)。请注意保留HTML标签。


0
在MacOS中,可以通过命令行直接调用由Xcode安装的交叉编译的GCC(这样我就可以在一个小的测试文件上运行它并请求汇编输出)。
使用此脚本进行编译iPhone的gcc:
#!/bin/bash

# Note: The "/Applications/Xcode.app/Contents" prefix is only required on 10.7.2 and 
# later (where Xcode is installed through app store rather than as a package).
# If running 10.6 or earlier, cut out that prefix.
PLATFORM=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform
# Change this to the iOS version you want to compile for (you must have the platform
# SDK installed in Xcode)
VER=6.1

$PLATFORM/Developer/usr/bin/gcc -arch armv7 -framework IOKit -framework CoreFoundation -F $PLATFORM/Developer/SDKs/ iPhoneOS$VER.sdk/System/Library/Frameworks -I $PLATFORM/DeviceSupport/Latest/Symbols/usr/include -L $PLATFORM/Developer/SDKs/iPhoneOS$VER.sdk/usr/lib -L $PLATFORM/Developer/SDKs/iPhoneOS$VER.sdk/usr/lib/system $*

来源:newosxbook.com


0

看看Radare2,它是一个开源工具,不断提升其功能集,并已经支持ARM反汇编。


0

看看Hopper吧。与IDA相比,它非常便宜(虽然不是那么强大),最近的版本可以处理ARM。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接