Недопустимая инструкция (ud2) при запуске приложения с Xcode как root на macOS - PullRequest
2 голосов
/ 28 марта 2020

Я пытаюсь запустить свое приложение как root с Xcode на macOS, но продолжаю получать эту причудливую ошибку ..

Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

Это буквально просто привет мир. Все, что я добавил, это printf к приложению Obj- C по умолчанию, попытался запустить его как root, ааа, и это каким-то образом заканчивается инструкцией ud2. Я попытался запустить Xcode с sudo, редактировать схему, комбинацию двух, и ничего не работает. Кажется, что только мысль о root дрожь заставляет Xcode вставить некоторую неопределенную инструкцию, и cra sh.

edit: я нахожусь на 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);
}

«Мой код» на самом деле ничего не делает. Удаление printf по-прежнему вызывает инструкцию ud2 cra sh, поэтому фактический шаблон, разработанный Apple, не работает при запуске как root ..

1 Ответ

3 голосов
/ 28 марта 2020

Я попробовал ваш проект, который я скачал по предоставленной вами ссылке на GitHub, и я могу сказать вам, что могу воспроизвести ошибку, о которой вы сообщили. По-видимому, существует некоторая несовместимость между libsystem_secinit кодом инициализации и при включении права от App Sandbox до YES. Если вы выключите его, cra * sh исчезнет.

Это напоминает мне о баге , описанном эскимосом , который является действительно полезный инженер Apple. Он также описал некоторые несовместимости между правами и libsystem_secinit.

Я бы определенно рекомендовал вам сообщить об ошибке в отношении этой несовместимости с Feedback Assistant. По крайней мере, код панели котла Apple должен работать без сбоев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...