xnu相关内容

如何从 Kext 访问未导出的符号?

我尝试在运行 11.4 Beta (20F5046g) Big Sur 的 M1 机器上加载 kext 模块,但在加载 kext 模块时遇到一些绑定错误消息. 访问从 Apple kext 模块导出的内核符号 首先,为了访问从苹果的 kext 模块 com.apple.kpi.unsupported 导出的内核函数,我使用了下面的 extern 声明. extern int cpu_ ..
发布时间:2021-11-16 20:34:08 其他开发

删除驱动程序启动的plist文件后,使kextcache无效

我已经为我的驱动程序创建了卸载程序,该卸载程序从/Library/LaunchDaemons 中删除了与其匹配的plist文件,因此在下一个引导周期中不会再次加载该文件.但是,它似乎对引导计算机后仍在正常加载的驱动程序没有任何影响. 在对此事进行了一些研究之后,我发现 kextcache 是此行为的原因,为了清除/使之失效,我需要 touch 安装目标卷所在的文件夹.但是,它没有任何作用. ..
发布时间:2021-05-31 19:25:16 其他开发

OSX(XNU)系统调用实际记录在哪里?

我正在查看系统调用.master 文件,但完全没有记录.是否存在有关syscall的文档?如果没有,为什么不呢? 通过文档,我的意思是对每个系统调用的作用及其所接受参数的含义的实际解释. 解决方案 Apple的立场是系统库是API,稳定的ABI是系统库,而syscall不是.他们不鼓励直接使用,因为它们可以随操作系统的发行版本而变化. 因此,您将看到的最佳文档是第2节的手册页, ..
发布时间:2021-05-31 19:12:09 其他开发

如何从Kext访问未导出的符号?

我试图在运行11.4 Beta(20F5046g)Big Sur的M1机器上加载kext模块,并在kext模块加载时遇到一些关于绑定的错误消息. 访问从Apple kext模块导出的内核符号 首先,要访问从苹果的kext模块com.apple.kpi.unsupported导出的内核函数,我使用了以下extern声明. extern int cpu_number(void); ..
发布时间:2021-05-31 19:05:09 其他开发

xnu中的vnode和文件描述符,文件操作向量存储在哪里

在xnu中,我们有 vnode_t 实体,该实体全局表示文件。 每个进程都可以访问文件(假设它具有正确的权限),方法是设置新的文件描述符并在vg_data下设置vnode fp-> f_fglob-> fg_data = vp; vnode包含所有相关操作的基本操作列表,并根据文件的FS进行设置。即HFS +驱动程序实现此向量并相应地设置其vnode。 ..
发布时间:2020-10-26 19:28:53 其他开发

通过IOKIt命令传递CFDictionary

我正在寻找一种从用户空间代理到内核配置参数的通用方法,因为没有Mac等效于Windows注册表,在Windows注册表中,驱动程序可以使用ZwQueryValueKey命令直接访问此表中的任何键. 因此,我想通过CFDictionary传递动态变量列表. 在IOConnectCallMethod中有一种传递输入指针的方法,但是问题是我是否可以传递CFDictionary或CFDicti ..
发布时间:2020-08-14 23:20:29 其他开发

通用内核扩展无法释放OSObject派生类

我有通用内核扩展,它在C ++示例中为开始和结束例程实现,而所有其他逻辑都存储在从OSObject继承的专用类中. 它在模块启动例程时创建该类,并在停止例程中释放该类,如下面的代码所示: class com_my_driver : public OSObject { ... }; ... .. . com_my_driver *gDriver = NULL; extern "C" ..
发布时间:2020-08-14 22:03:29 C/C++开发

XNU入侵Kext

我正在研究Kext,它应该可以访问struct proc->p_pid字段.问题在于结构仅在XNU源中定义,因此在编译过程中遇到了incomplete definition of type 'struct proc'错误. 从我的角度来看,将XNU标头包含到我自己的项目中是一种不好的解决方案,但是替代方法是什么?是要复制结构并将其粘贴到我自己的代码中吗? 解决方案 您应该为此使用pr ..
发布时间:2020-08-14 21:49:26 其他开发

加载Mach-O可执行文件需要什么?

我正在尝试手写Mach-O可执行文件.共有三个加载命令: LC_SEGMENT_64正在加载__PAGEZERO LC_SEGMENT_64使用单个__text部分加载__TEXT LC_UNIXTHREAD和适当设置的rip 每个命令都匹配mach/loader.h中的结构和相关的头文件. otool -l按预期列出信息,并且不报告任何错误.从所有人的角度来看,这是一个格式正确的 ..
发布时间:2020-07-08 08:34:10 其他开发

在多个不同的内核模块(驱动程序)之间进行通信

为了获得更好的封装和模块化,我决定将内核驱动程序拆分为2个(可能更多)模块,每个模块负责不同的功能. 但是,我仍然想在这些模块之间共享一些数据和逻辑(即一个模块可以管理与用户空间的通信,而另一个模块用作中介),我想知道是否有任何简单的方法这样做的方式. 例如,我想将一些API从一个模块发布到另一个模块,这是绝对可行的,因为两个模块都在内核进程下运行,并且映射在同一地址空间中的不同范围内 ..
发布时间:2020-06-26 19:11:53 其他开发

Dtrace打印父进程命令

我想要一个脚本,该脚本为每个新运行的进程打印其启动命令及其父进程. 我正在使用以下探针: proc::posix_spawn:exec-success,proc::__mac_execve:exec-success 在脚本正文中,命令行字符串是从curproc->p_dtrace_argv构建的. parent pid(ppid)也可用,但是到目前为止,我还没有弄清楚如何提取 ..
发布时间:2020-06-12 19:33:41 其他开发

从OSX 10.10/10.11内核检索进程路径

我想从kext中的PID检索进程的路径,如下所示:还有其他方法可以从kext检索进程struct proc *p的proc_info吗? 解决方案 应该返回进程的主要可执行文件vnode,proc_getexecutablevnode()的函数在私有KPI中,该函数仅可用于Apple发布的kexts 它所依赖的信息应该存储在struct proc的p_textvp字段中,该字段再次不 ..
发布时间:2020-05-04 11:16:21 其他开发

竞赛:在OSX中卸载kext期间的回调和删除回调

在建立/删除回调(例如kauth_unlisten_scope)和回调本身(在xnu代码库中,是的,我知道,它已过时)之间似乎没有同步.这就增加了跟踪/清除回调以及与扩展本身上的调用同步的负担.但这也是有问题的,因为有一个窗口可以指出线程已退出回调并实际上退出了扩展代码. 是否有任何模式可以正确避免这场比赛?或者,Apple是否有任何文件表明他们已经正确同步了此文件? 解决方案 据我 ..
发布时间:2020-04-25 11:29:26 其他开发

OS X如何生成崩溃报告?

可从网上,邮件列表,诸如 Mac OS X Internals 之类的书籍中获得的材料,甚至包括源代码,都非常有限. 现在,我知道xnu内核会引发一个EXC_CRASH,它会通知启动以启动“问题Reporter.app"(之前是Crash Reporter.app).这个应用程式是使用某种侦错介面来产生当机报告吗,还是它的内核已经在产生报告并只是通知应用程式以开启已经产生的报告? 解决方案 ..
发布时间:2020-04-25 11:24:30 其他开发

Sierra上的kprintf(内核printf)日志在哪里?

有很多页面对此进行了解释,但我找不到它.我发现许多文章仅适用于El Capitan和较旧的系统. 我现在没有使用fwkpfv,因为我没有正确的加密狗.我的客户给我买了一台支持Firewire的二手MacBook. 我的内核扩展恐慌了我的盒子.奇怪的是,如果我的同事构建了我的扩展程序,它就可以正常工作.我仍然感到困惑. 解决方案 您可以使用命令获取“实时"本地内核日志 lo ..
发布时间:2020-04-25 11:21:16 其他开发