宁波环保营销型网站建设,大学生电子商务策划书,杭州四喜做网站建设么,广东省广州市有哪几个区无符号文件的驱动中断DriverEntry方法
当我们调试有符号的windows驱动时#xff0c;通常可以使用bu module!DriverEntry, 在模块的DriverEntry位置打上断点。 那么对于无符号驱动#xff0c;应该如何找到DriverEntry函数的位置呢#xff1f;
从正常的DriverEntry的调用栈…无符号文件的驱动中断DriverEntry方法
当我们调试有符号的windows驱动时通常可以使用bu module!DriverEntry, 在模块的DriverEntry位置打上断点。 那么对于无符号驱动应该如何找到DriverEntry函数的位置呢
从正常的DriverEntry的调用栈栈中可以看到驱动加载的调用路径基本上如下所示。 nt!IopLoadDriver-nt!PnpCallDriverEntry-module!DriverEntry 虽然每个系统的实现可能存在差异但是基本上都会调用到IopLoadDriver函数。 因此我们可以使用uf nt!IopLoadDriver命令查找 nt!IopLoadDriver的下层调用。 上图中可以看到在pe文件后又通过nt!PnpCallDriverEntry进入了下层函数。 然后在反汇编窗口中可以发现这里通过CFG的派遣调用方式执行了RAX指向的函数。 因此我们在上图红色位置打下断点等待内核执行到这里查看RAX的地址。即驱动的DriverEntry入口点。 _guard_dispatch_icall 描述_guard_dispatch_icall是CFG机制的派遣函数。 在内核中许多函数都需要进行间接调用出于安全性考虑避免目标地址被控制因此不会直接CALL目标地址而是先通过_guard_dispatch_icall检查地址合法性并由其进行调用如果地址合法它的作用相当于「CALL RAX」。