【问题标题】:Using IOSleep in socket filtering kernel extension在套接字过滤内核扩展中使用 IOSleep
【发布时间】:2014-06-25 06:13:13
【问题描述】:

我正在开发一个内核扩展,它处理每个构建在系统上的套接字,并在用户空间等待用户确认以允许或拒绝该套接字。 我正在使用 IOSleep 来应用我上面提到的等待,但在加载内核扩展时会出现此错误。

"此 kext 无法解析以下符号: _IOSleep"

首先,我想知道使用 IOSleep 进行等待是否正确? 如果不是,我应该如何应用所需的等待来覆盖我需要让用户确认允许或拒绝特定套接字连接的时间间隔?

提前感谢您提供任何有用的回复。

【问题讨论】:

    标签: objective-c macos sockets kernel-extension


    【解决方案1】:

    IOSleep 在内核扩展中非常好。您看到的错误是因为库在加载时链接到 kext,而不是编译时。

    当您向代码中添加需要链接新库的函数时,您必须在编译后的二进制文件上调用kextlibs,以便找出您需要添加到 plist 文件中的内容。这在Generic Kernel Extension tutorial in the Mac Developer LibraryAdd Library Declarations section 中有解释,但是第一次之后很容易忘记这样做。

    基本步骤是:

    1. 构建您的 kext
    2. 在终端中运行命令kextlibs -xml MyKext.kext
    3. 用上面的打印输出替换 kext Info.plist 文件中的<key>OSBundleLibraries</key><dict>...</dict> 部分
    4. 重建你的 kext

    当您使用kextload 加载它时,它现在应该可以正确链接了。

    【讨论】:

      猜你喜欢
      • 2016-06-11
      • 2022-11-19
      • 2021-02-01
      • 1970-01-01
      • 2019-03-14
      • 2012-09-08
      • 1970-01-01
      • 2011-06-24
      • 2018-01-14
      相关资源
      最近更新 更多