gpt4 book ai didi

c++ - 覆盖另一个 kext 定义的方法?

转载 作者:太空狗 更新时间:2023-10-29 21:50:05 27 4
gpt4 key购买 nike

我需要覆盖一个由kext定义的方法来做我自己的处理并返回我自己的值,所以每当kext调用这个方法时,它就会被路由到我的。所以我想做的是在我自己的内核扩展中定义这个方法,然后加载它。 问题是我不知道如何交换方法所以我的方法被调用

/* 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 来实现,因为所有内核扩展都在同一地址空间中运行(我认为这是唯一的方法,但我不确定该怎么做)。

最佳答案

您当然可以通过破解 vtable 来实现这一点,但我不知道您将如何去做。我知道 C++ kext 加载和卸载机制管理 vtables 和 vtable 版本控制;源应该是可用的,所以看看那个。

然而,vtable 修补应该是最后的手段。您确定不能通过子类化 AppleHDAPathSet 来实现这一点吗?假设这不是一个 IOKit 个性类,你也必须对其进行子类化,并设置你的 info.plist 以便你的子类个性具有比基础更高的探测分数。在您的 probe() 方法中决定是否需要应用您对 isPinDigital 的 hack。然后覆盖最初实例化 AppleHDAPathSet 对象的任何方法,并使其创建您的子类版本的实例。

关于c++ - 覆盖另一个 kext 定义的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6897734/

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