如何创建无代码内核扩展?

How to create a codeless kernel extension?

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

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

无代码 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 中创建一个 "Aggregate" 目标,并将所有这些命令(除了第一个)放在目标的 "Run Script" 构建阶段,如果您愿意的话它是您 Xcode 构建的一部分。

Xcode 方式

如果您希望 Xcode 像对常规 kext 那样对 Info.plist 进行预处理,您还可以让 Xcode 为你,不需要自定义脚本:

  • 在您的项目中创建一个 "I/O Kit Driver" Xcode 目标。
  • 删除源代码文件Xcode将自动创建。 (最简单:在项目导航器中删除它们,在询问时回复 "move to trash"。这将从目标的构建和源代码树中删除它们。)
  • 自定义您的 Info.plist(见下文)
  • 如有必要,请选择您将用于在目标构建设置中签署 kext 的 Developer Id 证书。
  • 点击构建 (⌘B)

无代码 kext Info.plist 提示

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

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