问题标签 [xnu]
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.
c - 监听 unix 套接字时检查发件人
我有一个监听 unix 套接字的进程。但是,在阅读之前,我想检查有关此传入消息的一些元数据,例如它的源进程(例如,我想删除来自不受信任的发件人的消息)。是否有任何系统调用可以检索此信息。
macos - 删除驱动程序启动 plist 文件后使 kextcache 无效
我已经为我的驱动程序创建了卸载程序,它从中删除了匹配的 plist 文件,/Library/LaunchDaemons
这样它就不会在下一个引导周期被 launchd 再次加载。但是,它似乎对启动机器后仍在正常加载的驱动程序没有任何影响。
在对此事进行了一些研究之后,我发现这kextcache
是导致这种行为的原因,为了清理/使其无效,我需要touch
安装目标卷所在的文件夹。但是,它没有任何效果。
我的问题是如何正确地使 kext 缓存无效,以便在删除相应的 plist 文件后,launchd 不会加载 kext。
感谢下面的答案,我使 kext 缓存无效。但是,我希望在我的卸载程序助手所基于的目标 c 中访问现有文件夹的等价物。
准确地说,这是我想转换为 Objective-C 的代码:
sudo touch /System/Library/Extensions; sudo touch /Library/Extensions
mach-o - 加载 Mach-O 可执行文件需要什么?
我正在尝试手写一个 Mach-O 可执行文件。共有三个加载命令:
LC_SEGMENT_64
加载__PAGEZERO
LC_SEGMENT_64
加载__TEXT
,单__text
节LC_UNIXTHREAD
用适当的设置rip
每个命令都匹配中的结构mach/loader.h
和相关的标头。otool -l
按预期列出信息并且不报告任何错误。众所周知,它是一个格式良好的目标文件——但 OS X 10.10.5 终止了该任务 (SIGKILL)。
在 OS X 加载之前检查 Mach-O 可执行文件的哪些功能?此信息位于何处?这些功能是否会因版本而异?(经常被引用的“OS X ABI Mach-O Reference”显然不见了。)
这是二进制文件的部分注释十六进制转储。
otool
健全性检查(摘录):
macos - 在 Mac OS X 上捕获系统调用
我正在尝试使用自制程序捕获由给定 PID 调用的所有系统调用(我不能使用任何 strace、dtruss、gdb ......)。所以我使用了中
kern_return_t task_set_emulation(task_t target_port, vm_address_t routine_entry_pt, int routine_number)
声明的函数/usr/include/mach/task.h
。
我写了一个小程序来捕捉系统调用write
:
输出是:
内核错误 46 对应于KERN_NOT_SUPPORTED
描述为“空线程激活(没有线程链接到它)”的宏/usr/include/mach/kern_return.h
,甚至在我调用write
.
我的问题是:我在这个过程中做错了什么?Kern_not_supported 确实意味着它还没有实现,而不是一个无意义的线程问题?
macos - 在使用 Virtualbox (5.x) 部署 El Capitan VM 后,`uname -m` 与 `arch` 不同
我将获得一个 El Capitan 虚拟机。我有一个在 CentOS-7.2/i5-6042P x64 机器上运行的 VirtualBox v5.1.6。我按照步骤“ https://techsviewer.com/how-to-install-mac-os-x-el-capitan-on-pc-on-virtualbox/ ”,最终帮助我获得了我的 El Capitan VM。但奇怪的事情让我感到困惑。请参阅下面的 CLI 输出。
本地主机:~ sid$ uname -a
达尔文本地主机 15.0.0 达尔文内核版本 15.0.0:2015 年 8 月 26 日星期三 16:57:32 PDT;根:xnu-3247.1.106~1/RELEASE_X86_64 x86_64
本地主机:~ sid$ 拱门
i386
本地主机:~ sid$ uname -m
x86_64
本地主机:~ sid$
我猜它设置了错误的 CPUID(只是猜测......)。所以,如果有问题,请纠正我。提前致谢!
——席德
macos - 在 mac os 上关闭 SIP 但仍然无法加载我的 kext
我是 kext 编程的新手,所以我的问题是:
我,我正在运行 macOS 10.11.6 我已经关闭了 SIP,但是当我尝试使用kextload并使用 -v 标志加载我的 kext 时,我发现我的 kext 已成功加载:
并检查我的 kext 是否已加载,我使用了 kextstat:
但是当我使用以下命令从/var/log/system.log 跟踪我的内核日志时:tail -f /var/log/system.log
我看到了那个错误:
allowing invalid signature -67050 0xFFFFFFFFFFFEFA16 for kext
我的 kext 是一个简单的 hello world kext,这是我的代码
提前感谢您的帮助
编辑:
所以经过多次测试后,它看起来像 kext 已成功加载,但是当涉及到代码签名问题时,我通过 Xcode Build Settings 并在那里我发现了代码签名,所以在代码签名中有代码签名身份,所以我将其设置为Don't代码签名,我使用 Xcode 构建工具构建它, xcodebuild -configuration Debug -target kern
但到目前为止仍然没有进展,所以我希望有人帮助至少提供一个链接或任何东西。
ios - 什么库包含通过 IOConnectCallMethod 调用的内核代码
我正在反转 iOS 固件。有什么方法可以找到通过 IOConnectCallMethod 调用的内核二进制代码?
macos - OSX 使用 FSevents 或内核队列来捕获打开的不存在文件
我想构建一个用户空间工具来监视任何尝试打开具有特定路径+名称的不存在文件(它不会出现在文件系统中)。
查看可用选项,最接近我需要的选项是使用 kevent 框架。
这是一个由 表示的监视文件的示例path
,它需要文件描述符。如果由于文件不存在而失败,也许有一个选项可以监视对path
事件的每次访问。open
macos - 在 MacOS 驱动程序中捕获 SIGKILL
我目前正在调试我的守护进程,该守护进程可能因 SIGKILL 而死。
我想捕捉用于我的进程的信号并添加该进程得到的打印输出。
我知道 SIGKILL 不能被进程级信号处理程序捕获,所以我决定使用 kext。
我查看了 xnu 源代码,发现这psignal
是将信号传递给目标进程的方法。但是,所以我尝试使用trampoline对其进行修补,但是该方法仅调用了另一个名为staticpsignal_internal
的静态方法,并且可能被编译器优化消除了。
也许还有其他方法可以获得某种机制,可能有助于捕捉这个 sigkill 事件,并可能提供在这种情况下设置适当回调函数的选项?
谢谢