如何访问 kext 中包含的类/函数 (Objective-C)

发布于 2025-01-10 15:55:20 字数 182 浏览 0 评论 0原文

内核扩展不仅能够在内核级别执行代码,而且还可以使内核级别数据可供更高级别的事物使用,对吗?这就是英特尔 PowerGadget 访问内核级信息的方式,因为它有一个可以从中提取该信息的 kext。

我的问题是,我如何通过我自己的 Objective-C 代码从 kext 访问信息?我可以访问某个功能吗?还是一个班?我该怎么做这样的事呢?

Kernel extensions are able to execute code at kernel levels but also make kernel level data available to higher level things, right? That's how Intel PowerGadget accesses kernel level info, because it has a kext that it pulls that info from.

My question is, How would I access info from a kext via my own Objective-C code? Can I access a function? Or a class? How would I do such a thing?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

陌伤浅笑 2025-01-17 15:55:20

现代 macOS 内核扩展(当您绝对必须使用它们时 - 对于许多类型的驱动程序,现在 DriverKit 或用户空间中有替代方案)使用 I/O Kit。使用IOKit用户空间框架,您可以访问由您的kext实现的I/O Kit服务。

  • 读取属性不受限制,因此这是与用户空间共享内核数据的简单方法。
  • 从用户空间设置属性需要通过重写 kext 的 IOService 子类中的 setProperties() 函数来显式选择。 (同时要格外小心,只允许设置“安全”属性并验证所有输入。)
  • 您的 kext 可以通过实现 IOUserClient 子类来提供成熟的用户空间 API - 这里的关键是调用 <来自用户空间的 code>IOServiceOpen 调用 IOService 子类中的 newUserClient 方法(该方法可以被覆盖,或者默认返回 IOUserClientClass 指定的类的实例) Info.plist 的 IOKitPersonality 中的属性),并且当您从用户空间调用 IOConnectCall* 函数之一时,这会调用 IOUserClient 子类中的 externalMethod 函数。

Modern macOS kernel extensions (when you absolutely must use them - for many types of driver, there are now alternatives in DriverKit or user space) use the I/O Kit. Using the IOKit user space framework, you can access the I/O Kit services implemented by your kext.

  • Reading properties is not restricted, so this is an easy way to share data from the kernel with user space.
  • Setting properties from user space needs to be explicitly opted into by overriding the setProperties() function in your kext's IOService subclass. (While taking extreme care to only allow setting "safe" properties and validating all inputs.)
  • Your kext can provide a fully-fledged user space API by implementing an IOUserClient subclass - the keys here are that calling IOServiceOpen from user space invokes the newUserClient method in your IOService subclass (which can be overridden or by default returns an instance of the class specified by the IOUserClientClass property in your Info.plist's IOKitPersonality), and that when you call one of the IOConnectCall* functions from user space, this calls the externalMethod function in your IOUserClient subclass.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文