【问题标题】:ARM disassembler/cross-compiler for examining iOS compilation用于检查 iOS 编译的 ARM 反汇编器/交叉编译器
【发布时间】:2011-04-19 16:07:21
【问题描述】:

谁能推荐一下:

  • 一个 ARM 反汇编程序,可在 Windows 或 MacOS 中运行,并且可以理想地理解 iOS 使用的可执行格式
  • 在 MacOS 中,一种直接从命令行调用 XCode 安装的交叉编译 GCC 的方法(这样我就可以在一个小测试文件上运行它并询问汇编输出)。

基本上,我很想看看 XCode/gcc 如何为 ARM/iOS 编译某些东西以帮助我进行优化。正如你所看到的,虽然我有 Windows 和 Linux 背景,但我基本上不是 Mac 专家,所以我不太熟悉例如。 XCode 将其所有 gubbinry 或 iOS 使用的任何二进制格式的来龙去脉都集成到这里。

我并不特别关心我是否必须在 Mac OS 或 Windows 下进行“反汇编”,但我试图避免的是安装一个全新的 GCC 副本,配置为交叉编译到 ARM,大概是 XCode已经在某个地方安装了一个非常好的安装...任何帮助表示赞赏。

【问题讨论】:

    标签: iphone ios arm cross-compiling disassembly


    【解决方案1】:

    您始终可以使用 otool 反汇编程序。这是相当基本的,但可以完成工作。

    IDA Pro可以反汇编iOS中使用的ARM Mach-O文件。使用它(在我的偏见看来)比查看死列表更好的体验。您可以使用demo version 查看它的工作原理。

    免责声明:我为 Hex-Rays 工作。

    【讨论】:

    • 谢谢,但据我所知,虽然 IDA Pro 的演示版只能反汇编 Windows EXE 文件?
    • P.S.也感谢您提到 otool——我想这可能会给我我需要的东西!
    • 演示版可以处理 x86 和 ARM 的 EXE、ELF 和 Mach-O 格式。
    • 请注意demofree 版本之间存在差异。 AFAIK,免费版只有 x86,而演示版包括 ARM。
    【解决方案2】:

    在 Windows 或 MacOS 中运行的 ARM 反汇编程序,可以理想地理解 iOS 使用的可执行格式

    我可以建议您使用 LLVM。如果使用默认选项构建,llvm-objdump 将反汇编 ARM。

    另外,看起来http://developer.apple.com/technologies/tools/whats-new.htmlApple 正在 iOS SDK 中使用 LLVM 工具链。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          在 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

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              猜你喜欢
              • 2013-10-10
              • 2020-02-05
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-02-05
              • 1970-01-01
              • 2014-06-13
              • 1970-01-01
              相关资源
              最近更新 更多