C++ 如何从另一个kext动态强制转换类?
我有两个KEXT,C++ 如何从另一个kext动态强制转换类?,c++,xcode,iokit,kernel-extension,C++,Xcode,Iokit,Kernel Extension,我有两个KEXT,kextA和kextB。 在kextA中,我试图动态转换(使用OSDynamicCast)指向kextB中的类的指针 $ sudo kextutil -n -t -d B.kext A.kext Diagnostics for VD.kext: ... kxld[com...]: The following symbols are unresolved for this kext: kxld[com...]: classInB::metaClass Link failed
kextA
和kextB
。
在kextA
中,我试图动态转换(使用OSDynamicCast
)指向kextB
中的类的指针
$ sudo kextutil -n -t -d B.kext A.kext
Diagnostics for VD.kext:
...
kxld[com...]: The following symbols are unresolved for this kext:
kxld[com...]: classInB::metaClass
Link failed (error code 5).
Check library declarations for your kext with kextlibs(8).
有办法做到这一点吗
在
A.kext
中链接classInB
将在加载时出错(符号已存在)。您需要在kextA的Info.plist中将kextB声明为依赖项:在OSBundleLibraries
字典中,添加kextB的反向DNS包标识符作为键,并将其包版本作为值。您还需要将kextB放在/SLE或/LE(10.9+)中,因为这些是搜索依赖项的唯一位置(无论是否已加载kextB)
这假设您不仅仅是在强制转换,而是实际调用特定于classInB
的方法。如果您只需要测试一个特定的类,那么您也可以在没有链接的情况下进行测试:
OSMetaClass* classInB_mc = OSMetaClass::getMetaClassWithName("classInB");
OSMetaClassBase* cast_ptr = object_ptr->metaCast(classInB_mc);
if (cast_ptr)
{
// object_ptr can indeed be cast to classInB
}