2

我有一个要修补的设备驱动程序。此设备驱动程序调用 IOLog,我想摆脱日志记录。

如果我用设备驱动程序 (kext) 中的(相应数量的)NOP 替换 CALLL 到 IOLog,内核会崩溃,看起来像一个破碎的堆栈(“Backtrace 终止 - 无效帧指针 0”)。

然而,相同的技术在用户空间中工作得很好(例如,在 OS X 二进制文件中 NOPping NSLogs)。

我在这里想念什么?

4

1 回答 1

3

您没有解释您是进行冷补丁(磁盘上的驱动程序)还是热补丁(内存中的驱动程序)。对于内存中的修补,可能存在各种问题,例如修补时正在执行的驱动程序、具有缓存部分代码的 CPU 等。请参阅 Intel 手册中有关自修改代码的部分。

对于磁盘上的修补,可能是您有目标地址的重定位记录。所以当驱动加载时,动态模块加载器会在代码中修复IOLog的地址,替换为真实地址。这将覆盖您的 nop 指令。

于 2008-11-04T07:18:18.060 回答