在 macOS 上使用 Xcode 作为 root 运行应用程序时出现非法指令 (ud2)

som*_*ore 2 c macos assembly xcode objective-c

我尝试在 macOS 上使用 Xcode 以 root 身份运行我的应用程序,但我不断收到这个奇怪的错误。

Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
Run Code Online (Sandbox Code Playgroud)

这实际上只是一个你好世界。我添加的只是一个 printf 到默认的 Obj-C 应用程序,尝试以 root 身份运行它,aaa 并且它最终以ud2某种方式出现在指令上。我尝试过运行 Xcode sudo、编辑方案、将两者结合起来,但没有任何效果。似乎仅仅是 root 的想法就会导致 Xcode 插入一些未定义的指令并崩溃。

编辑:我使用的是 macOS Catalina 10.15.3 和 Xcode 11.4,这是我昨天刚刚下载的,这是我尝试运行的代码:

#import <Cocoa/Cocoa.h>

int main(int argc, const char * argv[]) {
    printf("Hello world\n");
    @autoreleasepool {
        // Setup code that might create autoreleased objects goes here.
    }
    return NSApplicationMain(argc, argv);
}
Run Code Online (Sandbox Code Playgroud)

“我的代码”实际上没有做任何事情。删除 printf 仍然会导致ud2指令崩溃,因此 Apple 开发的实际样板在以 root 身份运行时不起作用。

jva*_*ela 5

我尝试了从您提供的 GitHub 链接下载的项目,我可以告诉您我能够重现您报告的错误。显然,初始化libsystem_secinit代码与打开App Sandbox. 如果你把它关掉,崩溃就会消失。YES

这让我想起了爱斯基摩人描述的一个错误,他是一位非常乐于助人的苹果工程师。他还描述了权利和 之间的一些不兼容之处。libsystem_secinit

我绝对建议您针对反馈助手的这种不兼容性提交错误。至少,苹果的样板代码应该可以正常工作而不会崩溃。