繁体   English   中英

如何动态地从另一个kext转换一个类?

[英]How to dynamic cast a class from another kext?

我有两个kexts, kextAkextB 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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM