swift - 苹果操作系统 : is there any way to sniff system open call without kernel

标签 swift macos filesystems kernel-extension

我必须从 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/

相关文章:

cocoa - NSTextView:加载 RTF, View 不会正确更新,直到鼠标移到控件上

linux - 带有 -i 选项的 sed 命令(就地编辑)在 Ubuntu 上运行良好,但在 Mac 上运行良好

c - 在嵌入式 C 中使用 RTOS 处理多任务文件系统的最佳方法?

java - 将文件系统条目加载到内存映射文件(NIO2)的最快、最干净的方法

file - 在 Matlab 中检查文件是否打开

ios - 点击返回时保存更改 - Swift

ios - 如何在单元格中按下按钮时将数据从一个 Tableview 传递到另一个 Tableview?

ios - 按下时将选择器添加到 SKSpriteNode

在 OSX 上创建子进程并将子进程的标准输入和标准输出重定向到父进程?

swift - 使用 Swift 的 didSet 访问器,我是否仍然需要隐藏对属性的访问