Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Xcode 11编译时,vm_保护失败_Xcode_Macos_Memory_Xcode11_Entitlements - Fatal编程技术网

使用Xcode 11编译时,vm_保护失败

使用Xcode 11编译时,vm_保护失败,xcode,macos,memory,xcode11,entitlements,Xcode,Macos,Memory,Xcode11,Entitlements,我正在使用Mach-O部分之一的运行时内存解密。为此,我使用vm_protect,如下所示: uint8_t *section_start = 0; unsigned long section_size = 0; section_start = getsectiondata(&_mh_execute_header, "__TEXT", "__mysection", &section_size); // change virtual memory protection if (v

我正在使用Mach-O部分之一的运行时内存解密。为此,我使用vm_protect,如下所示:

uint8_t *section_start = 0;
unsigned long section_size = 0;
section_start = getsectiondata(&_mh_execute_header, "__TEXT", "__mysection", &section_size);

// change virtual memory protection
if (vm_protect(mach_task_self(), (vm_address_t)section_start, (vm_size_t)section_size, 0, VM_PROT_READ | VM_PROT_WRITE) != KERN_SUCCESS) {
    os_log_error(my_logger, "Virtual memory protection changing to write error");
    return false;
}
当我使用Xcode 10编译调试配置时,vm_保护成功。但是,使用Xcode 11编译的相同代码失败

我已尝试将这些权利添加到项目中:

com.apple.security.cs.disable-executable-page-protection
com.apple.security.cs.allow-jit
com.apple.security.cs.allow-unsigned-executable-memory
,但没有成功

还将签名证书更改为专门针对Xcode 11的Apple Development证书,结果相同

在Catalina和Mojave上运行该项目会得到相同的结果——如果使用Xcode 10构建成功,使用Xcode 11构建成功——失败


提前谢谢。

我也遇到了同样的问题。如果启用了强化运行时并指定了所有权限(包括上面指定的权限),则会遇到相同的问题。另外,如果我禁用了强化运行时

我尝试编译到一个早期的SDK(早在10.8版本),但问题仍然存在(即使使用早期版本的XCode编译到同一个SDK时它并不存在)

我还尝试使用链接器标志将u_文本段设置为可写: segprot,文本,rwx,rwx。 这一次不是vmprotect失败,而是较早时崩溃,出现dyld错误:“\u文本段映射文件的开头,但可写”


这肯定是XCode 11的一个bug吗?

我忘了提到在测试机上禁用了SIP。也许最新的XCode指向SDK,在SDK中,
vm\u protect
的实现是不同的。尝试将SDK更改为与Xcode 10中相同的版本。@MeirS将
rwx
权限设置为整个
\u TEXT
段在您的情况下是否有任何用处?不过,这肯定不是最微妙的方法。@Meirs甚至更好也许你可以简单地将你的
“\uu mysection”
移动到
\uu TEXT
段之外。首先,从
vm\u protect()
返回的错误代码是什么?另外,您是否尝试过更现代的函数
mach\u vm\u protect()
?检查“文本段映射文件开头但可写”的可能解决方法