【问题标题】:How to use otool to check for whether Stack Smashing is enabled or not?如何使用 otool 检查 Stack Smashing 是否启用?
【发布时间】:2018-08-15 03:29:39
【问题描述】:

我看到很多答案,比如互联网上的thisthis 说要使用otool 命令来检查项目中的stack_chk_guardstack_chk_fail

问题是,我不知道 otool 必须应用于哪个文件。在source 上,他们说这个otool 将应用于扩展名为.a 的文件,这是一个库。但我不知道如何将其应用于我想要检查整个项目的情况,而不仅仅是一个库。我试图在我的项目中找到任何带有.a 扩展名的文件,但我没有找到。我尝试对.app.framework.xcarchive.ipa 运行otool,都失败了。

有人可以帮忙吗?如有必要,请详细说明,因为我之前从未使用过otool,而互联网上的文档在描述otool可以检查哪些文件时根本没有帮助。

【问题讨论】:

    标签: xcode otool


    【解决方案1】:

    经过一次令人毛骨悚然的搜索会话后,我发现您应该提供给 otool 的文件位于 .app 目录中。是的,.app 是一个目录,而不是一个文件。

    所以这是怎么做的:

    • 首先构建您的项目,这将创建一个.app 文件。
    • 在 Xcode 项目导航器(左侧面板)中,过滤底部的 .app 名称。
    • 右击.app文件,选择“在finder中显示”。
    • 打开一个终端窗口。
    • 键入cd,然后将.app目录拖到终端。它将填充路径。
    • 输入otool -Iv Your_App_Binary_Name | grep stack

    Your_App_Binary_Name 位可能会让您感到困惑,但不要这样。请注意您的.app 目录的名称是什么。例如,如果目录是MyApp.app,那么你的二进制文件应该是MyApp,没有扩展名,在MyApp.app 目录中。如果您使用 finder 看到该文件(右键单击 .app 并选择“显示包内容”),您将看到二进制文件的类型是 UNIX 可执行文件。

    (别忘了,如果你的应用名称中包含空格,你需要使用反斜杠来转义空格。例如,如果你的应用名称是“我的神圣应用”,那么目录是My\ Holy\ App.app,应用二进制是My\ Holy\ App)

    因此,对于名为“我的应用”的目标,您的终端将如下所示:

    $ cd ......./Build/Products/Debug-iphoneos/MyApp.app
    $ otool -Iv MyApp | grep stack
    0x00000001000c17bc 19966 ___stack_chk_fail
    0x00000001000d8268 19967 ___stack_chk_guard
    0x00000001000d8d18 19966 ___stack_chk_fail
    

    或者如果你的目标有“我的神圣应用”之类的空格:

    $ cd ......./Build/Products/Debug-iphoneos/My\ Holy\ App.app
    $ otool -Iv My\ Holy\ App | grep stack
    0x00000001000c17bc 19966 ___stack_chk_fail
    0x00000001000d8268 19967 ___stack_chk_guard
    0x00000001000d8d18 19966 ___stack_chk_fail
    

    编辑: 用户 mnemonic23 表示,如果您使用从位码重建的方式编译 IPA,otool 的结果将不会显示上述结果。您必须编译 IPA 而不从位码重建。

    【讨论】:

    • 这与描述的完全一样。谢谢你把这个放在一起。
    • 我发现它只适用于临时部署,不适用于应用商店/发布模式。我说的对吗?
    • 我导出了 adhoc ipa,结果显示。但不适用于为应用商店导出的 ipa。正常吗?
    • @mnemonic23 在我的情况下,我也导出用于企业分发,它为我显示了结果。我还没有尝试过appstore案例。
    • 我已经确认导致结果也没有显示的位码。所以我在导出时取消选中“包含位码”并且它起作用了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 2011-08-22
    相关资源
    最近更新 更多