繁体   English   中英

哪些方法/调用执行磁盘I / O操作,以及如何找到它们?

[英]Which methods/calls perform the disk I/O operations and how to find them?

  1. 我应该使用哪些方法和系统调用,以便可以替换OS X应用程序(目标)如何从HD读取和写入HD?
  2. 如何确定功能或系统调用列表?

添加更多上下文:这是最终项目,我正在寻求建议。 目的是改变OS X应用程序的行为,为其添加数据加密和解密功能。

  1. 我可以使用哪些工具来实现自己的目标,为什么?

例如,假设目标应用是“文本编辑”。 而不是将“ hello world”以纯文本格式保存在HD的.txt文件中,而是保存:“ ifmmnXxnpme”。 打开文件将显示原始文本。

我认为最好变得更现实或至少意识到您想做什么。


软件中的最低级别是存储模块之上的内核模块,用于“加密”数据。
在Windows中,您可以堆叠驱动程序,因此从概念上讲,您只需拦截对读/写的调用,对其进行编辑并将其传递到驱动程序堆栈中即可。
在BSD下肯定有一个等效的机制,但是我不确切知道它是什么。

我认为您不想深入研究内核编程。


从用户空间应用程序的角度来看,最低级别是系统调用。
在BSD派生的OS(如OS X)中,用于写入和读取的系统调用分别为3和4(请参见此处 ),它们分别为2000003h2000004h (请参见此处 )。
IA32e特定于此,因为您使用的是Apple计算机。

可以通过内存映射文件来读取/写入文件,因此您也需要劫持系统调用sys_mmap
由于您需要检测页面错误或用于实现文件映射的任何机制,因此这更加复杂。

要劫持系统调用,您需要再次使用内核模块。


下一个更高的抽象层是运行时,可能是Obj C运行时(在数据上,Swift仍使用Obj C运行时AFAIK)。

Obj C应用程序使用Cocoa Framework,并可以通过[NSData dataWithContentOfFile: myFileName][myData writeToFile: myFileName atomically:myAtomicalBehavior]类的调用来读取/写入文件。
有很多可写入或读取文件的Cocoa方法,但是在内部框架将仅使用Obj C运行时中的方法。 我不是Cocoa内部专家,因此您需要使用调试器并查看调用链是什么。

找到可以读写文件的“低级”方法后,即可使用swizzling方法

如果目标应用程序将您的代码作为库的一部分加载,这确实很简单,否则您将需要更巧妙的技术(例如直接感染或操纵其他进程的内存)。 您可以在Google周围搜索更多信息。

再次说老实话,尽管可以管理,但是这仍然是很多工作。
您可以考虑简单地劫持一组有限的Cocoa方法,例如NSDatawriteToFileNSString类似方法,然后将该项目视为正在进行中的演示。


在这里已经提出了类似的问题并得到了回答。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM