重写由另一个ext定义的方法
Overriding a method defined by another kext?
我需要覆盖由ext定义的方法来执行我自己的处理并返回我自己的值,因此每当ext调用该方法时,它将被路由到我的方法。所以我想做的是在我自己的内核扩展中定义这个方法,然后加载它。问题是我不知道如何交换方法,所以我的方法被调用而不是。
/* basically, I need to override the isPinDigital method of AppleHDAPathSet */
AppleHDAPathSet::isPinDigital(void)
{
/* I also need to be able to call the superclass' method */
/* return my own value */
return 0;
}
是否有简单的方法来做到这一点?我知道有一种方法可以通过VTables作为所有内核扩展在同一地址空间中运行(我认为这是唯一的方法,但我不确定如何做到这一点)。
您当然可以通过修改虚函数表来实现这一点,尽管我不知道您将如何做到这一点。我知道c++的ext加载和卸载机制管理虚表和虚表版本;源代码应该是可用的,所以请查看。
然而,虚表补丁确实应该是最后的手段。您确定不能通过子类化AppleHDAPathSet
来实现这一点吗?假设这不是一个IOKit的人格类,你也必须子类化它,并设置你的信息。按顺序排列,这样你的子类人格的探测分数就比基本人格高。在您的probe()
方法中决定是否需要应用您对isPinDigital
的攻击。然后覆盖最初实例化AppleHDAPathSet
对象的任何方法,并使其创建子类版本的实例。
相关文章:
- 在方法定义中显式指定命名空间
- 没有针对完全专用模板类的外联虚拟方法定义
- 将虚拟方法定义为私有方法时会发生什么情况?
- 单独的类声明和方法定义文件问题
- Eclipse CDT 不了解方法定义是什么
- C 方法定义具有模板
- Eclipse CDT将方法定义定义到标头文件
- 模板方法定义的问题 - 错误C2244:无法将函数定义与现有声明匹配
- 如何为 Product* getProductFromID(std::string)编写方法定义;.
- gdb 中的方法定义没有源代码
- 方法定义中的错误"passing const List<int> as this argument discards qualifiers"
- Sendmessage在方法定义内部无法正常工作
- C 公共方法定义后定义
- C++模板方法定义在类中不匹配
- 为什么通用模板方法定义与模板类专用化不匹配?
- 方法定义中的C++模板参数
- C++方法定义和变量声明
- 在继承层次结构中将方法定义为虚拟方法一次,以使多态性发挥作用
- 未为非访问器方法定义C++类属性
- 无法将一个类的方法定义为另一个类的好友