【问题标题】:How to create a codeless kernel extension?如何创建无代码内核扩展?
【发布时间】:2016-06-28 18:34:21
【问题描述】:

我知道如何在 KEXT 中加载驱动程序,并且我知道如何使用 xcode。问题是,如何创建无代码 kext

假设我已经有一个文本文件,我可以将它保存为 PLIST 文件吗?然后呢?如何将其(PLIST 文件)转换为 .KEXT 文件?使用 Xcode?还是从命令行? 我正在寻找分步指导。

【问题讨论】:

  • 我刚刚看到这个问题,因为我没有监控非常繁忙的“Xcode”标签。供将来参考:“kext”适用于任何类型的 OSX 内核扩展,“iokit”涵盖驱动程序(包括内核和用户空间 IOKit 使用),“xnu”是关于 OSX/iOS 内核本身的。
  • 非常感谢! pmdj!您帖子中的非常有用的提示。

标签: xcode macos iokit kernel-extension


【解决方案1】:

无代码 kext 几乎只是一堆包含 Info.plist 和从 OS X 10.9 开始的加密签名的目录。

YourKextName.kext/
 + Contents/
    + Info.plist - Your plist file
    + _CodeSignature/ - The 'codesign' tool will create and fill this appropriately

您可能还有一些本地化数据,但我不知道这在无代码 kext 中有什么用处。

要创建它,您有 2 个选项:

手动创建无代码 kext

  • 创建您的 Info.plist(对此有一些提示。)
  • 创建目录树 (mkdir -p "$BUILD_DIR/YourKextName.kext/Contents")
  • 将 Info.plist 复制到 (cp "$SOURCE_DIR/Info.plist" "$BUILD_DIR/YourKextName.kext/Contents/")
  • 签名。 (codesign -fs "Developer Id" "$BUILD_DIR/YourKextName.kext")

如果您希望将其作为 Xcode 构建的一部分,您可以在 Xcode 中创建一个“聚合”目标,并将所有这些命令(除了第一个命令)放在目标的“运行脚本”构建阶段。

Xcode 方式

如果您希望 Xcode 像对常规 kext 那样预处理 Info.plist,您还可以让 Xcode 为您完成所有工作,无需自定义脚本:

  • 在您的项目中创建一个“I/O Kit Driver”Xcode 目标。
  • 删除 Xcode 将自动创建的源代码文件。 (最简单的方法:在项目导航器中删除它们,当它询问时回复“移动到垃圾箱”。这会将它们从目标的构建和源代码树中删除。)
  • 自定义您的 Info.plist(见下文)
  • 如有必要,请选择您将用于在目标的构建设置中签署 kext 的开发者 ID 证书。
  • 点击构建 (⌘B)

无代码 kext Info.plist 提示

您的 Info.plist 类似于任何其他 I/O Kit kext 的 Info.plist,除了:

  • 没有可执行文件,所以CFBundleExecutable属性不能存在。
  • 您不需要/不想要OSBundleLibraries 属性,因为没有需要链接的可执行文件。
  • IOKitPersonalities 字典中的每个个性都必须有一个CFBundleIdentifier 属性来标识另一个 kext,其中一个包含提供您指定的任何IOClass 的可执行文件。

【讨论】:

    猜你喜欢
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 2019-03-06
    • 1970-01-01
    • 2018-04-26
    • 2020-12-15
    • 2011-06-24
    相关资源
    最近更新 更多