gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 06:01:18 26 4
gpt4 key购买 nike

我尝试在运行 11.4 Beta (20F5046g) Big Sur 的 M1 机器上加载 kext 模块,并在加载 kext 模块时遇到一些关于绑定(bind)的错误消息。

访问从 Apple kext 模块导出的内核符号

首先,为了访问从 apple 的 kext 模块 com.apple.kpi.unsupported 导出的内核函数,我使用了下面的 extern 声明。

extern int  cpu_number(void);

此外,我在 info.plist 上添加了 com.apple.kpi.unsupported

    <key>OSBundleLibraries</key>
<dict>
<key>com.apple.kpi.libkern</key>
<string>20.5</string>
<key>com.apple.kpi.unsupported</key>
<string>20.5.0</string>
</dict>

编译不会引发任何错误,但是当我尝试加载模块时,它会打印以下消息。

Error Domain=KMErrorDomain Code=31 "Error occurred while building a collection: 
1: One or more binaries has an error which prevented linking. See other errors.
2: Could not use 'kext' because: Failed to bind '_cpu_number' in 'kext' (at offset 0x0 in __DATA_CONST, __got) as could not find a kext which exports this symbol
kext specific:
1: Failed to bind '_cpu_number' in 'kext' (at offset 0x0 in __DATA_CONST, __got) as could not find a kext which exports this symbol
" UserInfo={NSLocalizedDescription=Error occurred while building a collection:
1: One or more binaries has an error which prevented linking. See other errors.
2: Could not use 'kext' because: Failed to bind '_cpu_number' in 'kext' (at offset 0x0 in __DATA_CONST, __got) as could not find a kext which exports this symbol
kext specific:
1: Failed to bind '_cpu_number' in 'kext' (at offset 0x0 in __DATA_CONST, __got) as could not find a kext which exports this symbol

我可以访问内核符号列表中指定的内核符号,但不是从 apple 的 kext 模块导出的吗?

我还想访问名为 SecureDTInitEntryIterator 的内核函数。我发现这个符号列在位于/System/Library/Kernels/kernel 的内核符号上。但是,$kextfind -defines-symbol _SecureDTIterateEntries 不会返回任何对应的 kext 模块名称。

作为一个IOS新手,我猜这个符号不是从苹果的任何kexy模块中导出的。有什么方法可以从我的 kext 模块访问这个函数吗?我认为我可以使用函数原型(prototype)对符号在内核空间中的地址进行类型转换,但我正在寻找一种系统的方法(如果存在的话)。

最佳答案

我刚刚检查过,关键细节似乎是您正试图在 arm64/aarch64 上访问此功能。事实证明,它在 x86_64 的“不受支持”KPI 中导出,但在 arm64 上却没有:

没有直接的方法来访问未导出的符号。如果你知道一个符号在运行内核的确切版本中的偏移量,你应该能够通过从已知函数地址偏移来计算地址;至少,这适用于 x86-64。由于 PAC(指针身份验证),arm64 可能需要额外的工作。

由于这会规避 Apple 的政策,因此我不建议在运输产品中使用此类技术。

关于macos - 如何从 Kext 访问未导出的符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67264758/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com