首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Xcode11编译时,vm_protect会失败

使用Xcode11编译时,vm_protect会失败
EN

Stack Overflow用户
提问于 2019-12-19 18:40:27
回答 1查看 454关注 0票数 3

我使用的是其中一个Mach-O部分的运行时内存解密。为了做到这一点,我像这样使用vm_protect:

代码语言:javascript
复制
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;
}

当我使用Xcode10编译Debug configuration时,vm_protect成功。但是,使用Xcode11编译的相同代码会失败。

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

代码语言:javascript
复制
com.apple.security.cs.disable-executable-page-protection
com.apple.security.cs.allow-jit
com.apple.security.cs.allow-unsigned-executable-memory

,但没有成功。

还将签名证书更改为Apple Development one,这是专门针对Xcode11的,结果相同。

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

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-01-17 20:32:00

我也遇到了同样的问题。如果我启用了Hardened并指定了所有权利(包括上面指定的权利),那么我就会遇到同样的问题。另外,如果我禁用了Hardened。

我尝试编译到较早的SDK (早在10.8),但问题仍然存在(即使使用较早版本的XCode编译到相同的SDK也不存在)。

我还尝试使用以下链接器标志使__TEXT段可写: segprot、__TEXT、rwx、rwx。这一次,它没有失败,而是在较早的时候崩溃,并显示了一个dyld错误:"__TEXT段映射了文件的开头,但它是可写的“。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59407982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档