阅读:1728回复:8
怎样hook结构ProtocolCharacteristics的ReceiveHandler成员(20)
我是个新手,各位帮帮忙。
我的目的是想拦截ndis.sys的数据包,现在已经hook到了 NdisRegisterProtocol( OUT PNDIS_STATUS Status, OUT PNDIS_HANDLE NdisProtocolHandle, IN PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics, IN UINT CharacteristicsLength ) 函数,我想进一步hook结构ProtocolCharacteristics的ReceiveHandler成员来拦截接受包,但是当我 把我自己的接受包函数地址值赋值给ReceiveHandler时候, ProtocolCharacteristics->ReceiveHandler =MY_NdisReceive; 运行就会出现蓝屏。我测试了下,给ProtocolCharacteristics结构里面任何成员赋值都会蓝屏,为什么呢? 哪位大虾帮我解决了这个问题,100分就是你的了 |
|
沙发#
发布于:2002-11-16 07:07
you must change the pointer before you call the NdisRegisterProtocol function(but save a copy of old pointer). or you can allocate a new ProtocolCharacteristics and pass the new ProtocolCharacteristics to NdisRegisterProtocol.
My firewall was done by this way. no problem. |
|
板凳#
发布于:2002-11-16 09:27
你可以参考一下 PCAUSA 的 PIM 代码,本站可以下载,用的就是 Hook NDIS 的方法。
|
|
地板#
发布于:2002-11-16 10:05
REVEIVE_HANDLER m_pNdisReceive =NULL;
//成功hook到NdisRegisterProtocol函数,代码如下,帮我看看原因 VOID NDIS_API MY_NdisRegisterProtocol( OUT PNDIS_STATUS Status, OUT PNDIS_HANDLE NdisProtocolHandle, IN PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics, IN UINT CharacteristicsLength ) { DbgPrint(\"MY_NdisRegisterProtocol\\n\"); m_pNdisReceive=ProtocolCharacteristics>ReceiveHandler; ProtocolCharacteristics->ReceiveHandler =MY_NdisReceive; //就是这句不能赋值,运行造成蓝屏,要了我的命 //转发给系统函数 m_pNdisRegisterProtocol( Status, NdisProtocolHandle, ProtocolCharacteristics, CharacteristicsLength ); } |
|
地下室#
发布于:2002-11-16 18:34
你要搞清楚,是这句话运行的时候蓝屏,还是在这个函数运行完了以后才才蓝屏的?
|
|
5楼#
发布于:2002-11-16 20:30
谢谢fracker的提示:
的确是在运行函数的时候出现蓝屏, fracker,为什么会出现这样的情况呢,帮我解决解决 |
|
6楼#
发布于:2002-11-16 20:50
那你要在函数入口处设定一个断点,然后单步看一看,是哪步出错?
|
|
7楼#
发布于:2002-11-16 20:52
有可能是你的函数MY_NdisReceive声明跟ReceiveHandler 声明不一致,造成退出堆栈错误,也有可能是你的这个函数里面有错误。
|
|
8楼#
发布于:2002-11-17 09:39
看来我又有新问题了,谢谢fracker的指点
给分 |
|