gpt4 book ai didi

c++ - OS X 获取远程进程输入参数有时会失败

转载 作者:行者123 更新时间:2023-11-30 05:40:31 25 4
gpt4 key购买 nike

我想以编程方式检索远程进程输入参数,所以我按以下方式使用 sysctl(部分代码):

int    mib[3]
mib = {CTL_KERN, KERN_ARGMAX,0,0}

size = sizeof(argmax);
if (sysctl(mib, 2, &argmax, &size, NULL, 0) == -1) {
goto ERROR_A;
}
procargs = (char *)malloc(argmax);

mib = {CTL_KERN,KERN_PROCARGS2,pid,0}

size = (size_t)argmax;
if (sysctl(mib, 3, procargs, &size, NULL, 0) == -1) {
printf("a");
goto ERROR_B;
}

然而,i 并不适用于所有进程。这是一个工作案例:

/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker -s mdworker -c MDSImporterWorker -m com.apple.mdworker.shared

但下面的案例在“sysctl(mib, 3, procargs, &size, NULL, 0)”上失败了。虽然,我成功地从终端使用'ps ax PID'获得了命令行

0   655   501   0 10:55AM ttys008    0:00.02 login -pfl zohar81 /bin/bash -c exec -la bash /bin/bash

也许你能告诉我为什么在第二个例子中使用 KERN_PROCARGS2 调用 sysctl 失败?

谢谢

最佳答案

我发现在 OS X 上,当可执行文件的所有者是 root 并且可执行文件启用了 SUID (set-uid) 标志时,该进程被授予所有进程对 KERN_PROCARGS2 的访问权限。唯一的异常(exception)是 PID 0 (kernel_task),但它甚至没有参数。

您可以使用以下方法为您的文件工作:

chmod u+s myprogram
sudo chown root:wheel myprogram
# now my program should be able to make get KERN_PROCARGS2 for all processes
./myprogram

关于c++ - OS X 获取远程进程输入参数有时会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31582787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com