小编som*_*ore的帖子

使用 mprotect 使文本段在 macOS 上可写

这基本上就是我想要做的,

#include <sys/mman.h>

int zero() {
    return 0;
}

int main(int argc, const char *argv[]) {
    return mprotect((void *) &zero, 4096, PROT_READ | PROT_WRITE);
}
Run Code Online (Sandbox Code Playgroud)

所以我试图使代码可写,本质上。这在当前的 macOS(Catalina 10.15.2)上不起作用,它只是返回-1并设置errnoEACCES,据我所知,这是因为缺乏权利/代码签名。我找到了我需要设置的权利,但我不知道如何去做,也不知道如何实际签署它..

如果我运行codesign -d --entitlements :- <path_to_app>,它会失败并显示code object is not signed at all,即使我已经尝试在 Xcode 中配置签名一段时间(我有证书等等)。那么我应该怎么做呢?实际上用 Xcode 签署它并不明显,所以我相当无能为力。

macos xcode text mprotect code-signing-entitlements

7
推荐指数
1
解决办法
2905
查看次数

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

我尝试在 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 身份运行时不起作用。

c macos assembly xcode objective-c

2
推荐指数
1
解决办法
943
查看次数