问题标签 [kernel-extension]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
241 浏览

macos - XNU 包含在 Kext 中

我正在研究应该可以访问struct proc->p_pid字段的 Kext。问题是结构仅在 XNU 源中定义,所以我incomplete definition of type 'struct proc'在编译过程中遇到了错误。

从我的角度来看,将 XNU 标头包含到我自己的项目中是一个难闻的解决方案,但是替代方法是什么?是将结构复制并粘贴到我自己的代码中吗?

0 投票
0 回答
237 浏览

kernel - 在 kext 中为 IOBlockStorageDevice 找到我自己的 BSD 名称

我认为这应该是一件很容易的事情,但它现在正在逃避我。大多数示例都处理“如果你有一个 BSD 名称 /dev/disk,你如何找到该设备”,而我刚刚注册了我的设备,并想找到它提供的 BSD 名称。即 /dev/disk2。

我制定标准

为新设备创建一个小块;

现在,我想找出我的新节点的 BSDName。如果它在 net_lundman_zfs_zvol 或 net_lundman_zfs_zvol_device 中,对我来说并不重要。

我以为我可以打电话

但它始终为 NULL。所以可能我必须找到我的IOMedia *并从那里打电话getProperty()

0 投票
2 回答
1008 浏览

kernel - 使用自定义 Darwin 内核

我正在为 Mac OS(Mountain Lion,Darwin 2050.22.13)构建一个自定义内核。我可以很好地构建内核,我可以向它添加东西,但我错过了一些东西。

为了简短起见,这里是我正在尝试做的一个示例。

假设我想添加一个函数 [my_func(void*)] 来表示,bsd/kern/kern_fork.c 我可以添加一个包含文件并将其粘贴到 osfmk/bsd 并更改 Makefile 以便新的 .h 文件现在被复制到 BUILD/obj/RELEASE_X86_64/EXPORT_HDRS/

我还将函数名称添加到 config/BSDKernel.exports。我可以在 /mach_kernel 中看到带有符号的函数,所以它看起来很好。

现在,这是棘手的部分。这本身并不棘手,但我无法弄清楚。我想要做的是能够从我也在编写的 kext 中调用我的函数。基本上它对我来说是某种私有 API。

我的 kext 编译得很好,但是当我运行 kextload/kextutil 时它抱怨它找不到 my_func 符号。

(内核)kxld[com.blah.foo.kext]:此kext无法解析以下符号(内核)kxld[com.blah.foo.kext]:_my_func

kextlibs 返回:对于所有架构:com.apple.kpi.libkern = 12.3

对于 x86_64:在任何库 kext 中都找不到 1 个符号

所以问题是如何使我的函数对我的 kext 可见?谢谢!

0 投票
1 回答
725 浏览

process - 处理来自 KEXT 的过程信息

在 KEXT 中,我需要做一些处理,我会得到一个 proc_t 或只是一个 pid。如果我走 pid 路线,我会做一个 sysctl() 之类的。

不幸的是,我也做不到。proc_t 是未定义的, sysctl() 也不是。可以调用 sysctlbyname() 但未定义 kinfo_proc。如果我尝试使用 proc_t,编译器会抱怨 [struct proc] 的前向定义

我假设 sysctl() 可以在用户模式下使用,但是有什么方法可以使用 proc_t 吗?我尝试使用 XNU/osfmk/bsd 包含目录,但由于重新定义和其他错误,它不会编译。

这有点令人不安,我仍在努力思考我能做什么和不能做什么。当然可以做到这一点,但我只是不知道怎么做。

0 投票
1 回答
68 浏览

c - 过滤器类型未声明?

我应该将一个Interrupt Filter传递给一个函数,但问题是,我的 Xcode 总是告诉我该Filter类型是未声明的..

这是我的代码的一部分:

我是新手MacXcode所以我真的不知道在这种情况下我应该怎么做。

当函数实际上采用该类型的参数时,它如何抱怨它没有被定义?

0 投票
2 回答
684 浏览

macos - 我可以在 KEXT 中获得任务吗?

只是想知道是否有可能在 kext 中为给定的 proc_t 获取任务。我尝试了 task_for_pid() ,但由于某种我不记得的原因它不起作用。我从 sys/proc.h 尝试了 proc_task(proc_t p) 但我无法加载我的 kext,因为该函数未导出。

我想我做错了什么,但我不知道是什么。假设我可以得到一个进程的任务,我想使用一些马赫调用并分配内存,写内存等等,但为此,我需要我相信的任务。

0 投票
0 回答
318 浏览

objective-c - KextManagerLoadKextWithIdentifier 的权限问题

我正在尝试在我正在编写的 Objective-C OSX 应用程序中重新加载 kext。KextManager API 似乎是我应该使用的(此处的文档)

调用KextManagerUnloadKextWithIdentifier()工作完美无缺,但是当我在使用后不久加载相同的 kext 时,KextManagerLoadKextWithIdentifier()我得到了这个控制台错误:

两种方法的文档都声明“调用进程必须有一个有效的用户 id 0(超级用户)”,但卸载有效而加载无效?他们当然应该表现相同吗?

0 投票
1 回答
1135 浏览

macos - 找不到 IOKit kext 的符号链接

我遵循了 Apple 开发者网站上给出的本教程

在运行kextlib时,它显示 2 个未定义符号,这是输出:

运行时:

在将输出传输到文件时,我得到 0 次点击 - 我意识到我正在寻找的符号甚至不存在于这里。即使我找到了它们,我也不知道如何链接这些符号或找到相应的库到我的驱动程序。

任何帮助都会有所帮助。这是我第一次研究 IOKit 驱动程序,似乎没有人遇到这个错误。

我正在运行 OSX 10.8.4 和 Xcode 5 DP5

提前致谢 !

0 投票
3 回答
365 浏览

macos - osx内核怎么会有这么多次文件操作

我在用户空间中创建了一个文件(使用 touch 命令),我希望只看到一个 OPEN 和一个 CLOSE 文件操作,但是,我从内核通知中获得了 2 个 OPEN 和 3 个 CLOSE 操作。操作顺序是这样的:打开 --> 关闭 --> 打开 --> 关闭 ---> 关闭....有人可以给我一些提示吗?提前致谢。

0 投票
1 回答
639 浏览

macos - mac平台如何监控操作

我正在尝试获取文件打开/写入/创建操作,我尝试过 fslogger 只能获取文件创建/删除....和其他操作,无法进行打开/关闭操作,然后我编写了一个驱动程序来做到这一点,我可以进行打开/关闭操作但不能进行创建操作,而且太乱了!例如,如果我打开一个文件并修改它,然后关闭它,驱动程序会得到很多打开/写入操作..我无法判断哪个是真正由用户打开/关闭操作引起的..任何提示对这个?谢谢。