阅读:1841回复:2
请版主,老牛们,再帮我看看(部分代码). 关于skmon 或 regmon 的问题 (急~~~)
先感谢znsoft 和 driverdance 的启发. 学习了一下WinDBG的使用.
部分代码如下: void HookReg { PULONG addr; *addr = GETSYSCALL(ServiceTable, ZwSetValueKey); RealRegSetValueKey = (REALREGSETVALUEKEY)*addr; *addr = (ULONG)SkMon_HookRegSetValueKey; } 设下断点后SkMon_HookRegSetValueKey的地址是0xF9BC5D10. 我在跟踪中发现,第一步得到系统服务表中ZwSetValueKey的位置,查看到 addr的内容是0X8061829a; * 0Xe8685c6a(这应该就是ZwSetValueKey的地址了吧). 第二步把*addr给到RealRegSetValueKey来保存旧地址.没什么说的.关键就是第三步,替换ZwSetValueKey. 执行*addr = (ULONG)SkMon_HookRegSetValueKey;之后,WinDBG显示 addr <Couldn't resolve error> 再就发生int 3中断了. 为什么这样,请指教. |
|
沙发#
发布于:2007-06-22 15:44
仔细看一下这段代码,就知道错在那里了,呵 .
不明白为什么有的操作系统不出错,有的操作系统就会出错呢. |
|
驱动牛犊
|
板凳#
发布于:2010-01-04 16:43
Re:请版主,老牛们,再帮我看看(部分代码). 关于skmon 或 regmon 的问题 (急~~~)
因为单核CPU用ntoskrnl.exe导出ServiceTable,而多核CPU用ntoskrnlpa.exe导出ServiceTable,所以有的可以,有的不可以。 |
|