OS X 获取远程进程输入参数有时会失败
OS X getting remote process input args sometimes fails
我想以编程方式检索远程进程输入参数,
所以我按以下方式使用 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;
}
然而,我并不适用于所有进程。
这是一个工作案例:
/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 访问权限启用标志。唯一的例外是 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
我想以编程方式检索远程进程输入参数, 所以我按以下方式使用 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;
}
然而,我并不适用于所有进程。 这是一个工作案例:
/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 访问权限启用标志。唯一的例外是 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