我必须从 Mac OS 中的任何位置打开一个文件,并且我想在它在任何相关应用程序中打开之前执行一些操作。有什么办法可以嗅探系统open call并保持一段时间,然后进行一些操作。
例如,我正在打开test.doc文件,它将在msword应用程序中打开,或者可以通过右键单击并选择任何其他应用程序打开。在我的 text.doc 文件上启动此 ms word 应用程序或任何相关应用程序(系统打开调用)之前,我想等待并执行一些操作。
Mac OS (C/C++/ObjectiveC/Swift) 的编程语言有没有办法不用进入内核?
任何帮助将不胜感激。
最佳答案
据我所知,完全拦截/ Hook 系统调用只能在 kext 中完成。
如果它是针对特定应用程序的,并且该应用程序支持动态加载的插件,您可以编写一个 Hook 系统调用的插件。
原则上,即使应用程序不支持插件,您也可以将代码注入(inject)进程并挂接该进程的 open() 系统调用。 (例如使用 mach_inject)这样做的缺点是如果例如用户双击 Finder 中的文件,这将启动应用程序并立即打开文件,只有非常短的时间窗口可以注入(inject)代码。我认为没有一种方法可以仅使用用户空间代码可靠地完成此操作。
关于swift - 苹果操作系统 : is there any way to sniff system open call without kernel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51470121/