我尝试将 kern.tfp.policy 设置为一个,但是它不允许我这样做。
sudo sysctl -w kern.tfp.policy=1
kern.tfp.policy:2 sysctl:kern.tfp.policy:无效参数
我如何设置 kern.tfp.policy=1。
我这样做是为了能够使用 mach_inject。
谢谢
答案1
这个选项五年前就已经从 Mac OS X 内核中完全删除了。
在792(Mac OS X 10.4.x Tiger),它仍然存在:
#define KERN_TFP_POLICY_DENY 0 /* Deny Mode: None allowed except privileged */
#define KERN_TFP_POLICY_PERMISSIVE 1 /* Permissive Mode: related ones allowed or privileged */
#define KERN_TFP_POLICY_RESTRICTED 2 /* Restricted Mode: privileged or setgid and realted */
在最近1228(Mac OS X 10.5.x Leopard)它已被删除:
#define KERN_TFP_POLICY_DENY 0 /* Deny Mode: None allowed except privileged */
#define KERN_TFP_POLICY_DEFAULT 2 /* Default Mode: related ones allowed and upcall authentication */
由于1
不再是此选项的有效值,因此您的调用将失败并显示该错误消息。
似乎没有办法再解决这个问题,所以你必须使用procmod
群组成员身份。
作为一种解决方法,请查看man taskgated
。它有一个允许 Tiger 兼容性的参数,以及一些其他参数。
接受旧的 (Tiger) 约定,即允许具有 procmod 或 procview 主有效组的进程获取任务端口。如果没有此选项,则不支持此传统模式。
您可能需要更改 launchdplist
并重新启动该服务。不确定您的用例是否可以这样做。