因此我可以使用inject_and_interpose代码进行一些注入和插入,我需要获取新启动的进程的PID (典型的闭源用户应用程序)在实际执行之前。
要明确的是,我需要做的不仅仅是“快速注意” - 我无法轮询,或者接收一些异步通知,这意味着该进程已经执行了几毫秒采取行动。
我需要有机会在单个语句执行之前进行注入和插入。
我愿意编写一个后台进程,当一个特定名称的进程出现时,该进程会同步通知。我也愿意编写一个启动器应用程序,然后启动目标应用程序。
任何解决方案都需要支持至少低于10.5(Leopard)到10.8(Mountain Lion)的64位代码。
如果事实证明这很简单,我会继续承认我是OS X的新手:)谢谢!
答案 0 :(得分:1)
我知道如何在Linux上执行此操作,因此在OSX上可能会是相同的(-ish)。
您首先致电fork()
以复制您的流程。 fork()
的返回值表示您是父母还是孩子。父级获取子进程的pid,子级为零。
然后,孩子调用exec()
实际开始执行新的可执行文件。通过使用在调用fork之前创建的管道,子进程可以在执行新的可执行文件之前等待父进程执行任何操作。
pid_t pid = fork();
if (pid == -1) {
perror("fork");
exit(1);
}
if (pid > 0) {
// I am the parent, and pid is the PID of the child process.
//TODO: If desired, somehow notify child to proceed with exec
}
else {
// I am the child.
//TODO: If desired, wait no notification from parent to continue
execl("path/to/executable", "executable", "arg1", NULL);
// Should never get here.
fprintf(stderr, "ERROR: execl failed!\n");
}