agiledragon / agiledragon/gomonkey

MacOS 上的 permission denied 问题,也可能和 cgo 有关

未关闭
#142 8 条评论 1 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
Go
星标
2.3k
派生
192
平均合并
1 天 6 小时
30 天内合并 PR
1

描述

环境
1. macOS Sonoma
2. AMD64
3. go 1.20.7

问题
之前都是正常使用,通过 cgo 引入 sqlite 依赖后,运行出现 permission denied 的问题。引入 cgo 的模块,跟 monkey patch 的模块没有任何关联。只是发现引入 cgo 后,monkey patch 的函数地址变得很大,40 多亿的一个整数,没有引入 cgo 之前是 4 千万。

解法
1. 通过 -ldflags=-extldflags=-Wl,-segprot,__TEXT,rwx,rx 参数运行 go test,可行。
2. 换用 https://github.com/bytedance/mockey 库,可行。通过对比代码,发现 mockey 在通过 mprotect 修改失败后,还会通过 mach_vm_protect 再尝试修改。去掉 mach_vm_protect 部分后,mockey 也不能 patch。

贡献指南

这个仓库没有索引到贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。