Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift Mac OS:有没有办法在没有内核的情况下嗅探系统打开调用_Swift_Macos_Filesystems_Kernel Extension - Fatal编程技术网

Swift Mac OS:有没有办法在没有内核的情况下嗅探系统打开调用

Swift Mac OS:有没有办法在没有内核的情况下嗅探系统打开调用,swift,macos,filesystems,kernel-extension,Swift,Macos,Filesystems,Kernel Extension,我必须从Mac OS中的任何位置打开一个文件,我想在它在任何相关应用程序中打开之前做一些操作。是否有任何方法可以嗅探系统打开调用并保持它一段时间并执行一些操作 例如,我正在打开test.doc文件,该文件将在msword应用程序中打开,或者可以通过右键单击并使用打开来选择任何其他应用程序。我想在text.doc文件上启动此ms word应用程序或任何相关应用程序(系统打开调用)之前等待一段时间并执行一些操作 Mac OS的编程语言(C/C++/ObjectiveC/Swift)中有没有不去内核的

我必须从Mac OS中的任何位置打开一个文件,我想在它在任何相关应用程序中打开之前做一些操作。是否有任何方法可以嗅探系统打开调用并保持它一段时间并执行一些操作

例如,我正在打开test.doc文件,该文件将在msword应用程序中打开,或者可以通过右键单击并使用打开来选择任何其他应用程序。我想在text.doc文件上启动此ms word应用程序或任何相关应用程序(系统打开调用)之前等待一段时间并执行一些操作

Mac OS的编程语言(C/C++/ObjectiveC/Swift)中有没有不去内核的方法


我们将非常感谢您的帮助

据我所知,完全拦截/挂接系统调用只能在kext中完成

如果是针对特定的应用程序,并且该应用程序支持动态加载的插件,那么您可以编写一个钩住系统调用的插件


原则上,即使应用程序不支持插件,也可以将代码注入该进程,并钩住该进程的open()系统调用。(例如,使用mach_inject)这种方法的缺点是,如果用户在Finder中双击一个文件,这将启动应用程序并立即打开该文件,则只有很短的时间窗口可以插入代码。我不认为只有用户空间代码就可以可靠地实现这一点。

即使使用内核扩展,由于内核中的各种保护(如KASLR),挂接系统调用也不再可行。对于Mojave,由于SIP,代码注入将不再可行。唯一受支持的方法是使用。

您到底需要什么?使用bash命令
open-a“Application name”file.extension
可以打开任何东西,因此,如果您在打开之前编写了一些脚本来完成某些工作,您就会得到所需的。我希望我理解你的意思是正确的。我可以打开文件并在打开之前添加我的逻辑。但是,如果一个普通用户在第三方应用程序中从finder打开一个文件,我无法保存它,我没有那个事件。要求是:如果用户打开系统中的任何文件,我的应用程序就会知道,这个文件将要打开,然后,我可以执行操作并打开该文件。它的覆盖/嗅探系统的开放调用
mach_inject
可能不再值得作为一个选项提及了——像Finder这样的系统应用程序受SIP保护,并且不能成为目标。(
task\u for_pid()
将失败。)感谢您提供的信息。您有任何示例代码吗?代码注入和库函数重写要比堆栈溢出答案中合理适用的复杂得多。(我在一个客户的项目中使用了这种技术,仅代码的这一部分就约为400 LOC。)