tanm2000
驱动牛犊
驱动牛犊
  • 注册日期2005-05-12
  • 最后登录2008-07-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望12点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
阅读:2569回复:19

怎么在NDIS HOOK DRIVER中复制ndis packet

楼主#
更多 发布于:2005-05-31 11:18
大家好!
我试过一些方法,但总是在NdisAllocatePacketPool这一函数失败(机器重启)请问怎么在NDIS HOOK DRIVER中复制ndis packet,
应该在什么地方调用NdisAllocatePacketPool分配自己的PacketPool
谢谢!



[编辑 -  5/31/05 by  tanm2000]
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2005-05-31 13:58
你用的是imd还是hook?如果是hook,注册一个假协议的方法?
NdisAllocatePacketPool是一个基本的操作,可以在<=DPC上操作,主要就是分配一块内存,一般都不会有问题。
你是在什么时候调用的,异常softice截住了吗?
报的什么错误?把问题说的详细一些,帮你分析分析
tanm2000
驱动牛犊
驱动牛犊
  • 注册日期2005-05-12
  • 最后登录2008-07-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望12点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-06-02 13:05
谢谢你的回复!
我用的是HOOK driver,注册假协议的方法。
我试过在NdisOpenAdapter前和后调用NdisAllocatePacketPool但都不行。我知道如果是IM driver的话应该在PtBingAdpater里调用 ,但我不明白HOOK driver应该在什么地方调用。


zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2005-06-02 22:11
谢谢你的回复!
我用的是HOOK driver,注册假协议的方法。
我试过在NdisOpenAdapter前和后调用NdisAllocatePacketPool但都不行。我知道如果是IM driver的话应该在PtBingAdpater里调用 ,但我不明白HOOK driver应该在什么地方调用。


 

从理论上讲从哪调用应该没有太大关系,因为这个函数主要就是分配一快内存。
softice可以截住吗,那一句汇编代码产生的错误?什么错误?
你也可以学习用windbg看看dmp文件,来分析问题出在哪?
tanm2000
驱动牛犊
驱动牛犊
  • 注册日期2005-05-12
  • 最后登录2008-07-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望12点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-06-07 14:52
我用的是windbg,但机器在login前就重启了,所以我也不知道是哪句汇编出的错,但肯定是NdisAllocatePacketPoolEX出错!
代码如下:
NDIS_HANDLE myOwnPacketPool;
NDIS_STATUS Status = NDIS_STATUS_SUCCESS
NdisAllocatePacketPoolEx(&Status,&myOwnPacketPool,MIN_PACKET_POOL_SIZE,
    MAX_PACKET_POOL_SIZE - MIN_PACKET_POOL_SIZE,
    PROTOCOL_RESERVED_SIZE_IN_PACKET);


zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2005-06-07 16:50
我用的是windbg,但机器在login前就重启了,所以我也不知道是哪句汇编出的错,但肯定是NdisAllocatePacketPoolEX出错!
代码如下:
NDIS_HANDLE myOwnPacketPool;
NDIS_STATUS Status = NDIS_STATUS_SUCCESS
NdisAllocatePacketPoolEx(&Status,&myOwnPacketPool,MIN_PACKET_POOL_SIZE,
    MAX_PACKET_POOL_SIZE - MIN_PACKET_POOL_SIZE,
    PROTOCOL_RESERVED_SIZE_IN_PACKET);


 

你如何确定是这个函数出的错?
在这个函数设个断点,跟踪一下,有转储文件吗?可以分析一下
我一般用ice调试,用windbg分析转储。
这个函数出问题没有道理
tanm2000
驱动牛犊
驱动牛犊
  • 注册日期2005-05-12
  • 最后登录2008-07-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望12点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-06-09 10:15
你如何确定是这个函数出的错?
在这个函数设个断点,跟踪一下,有转储文件吗?可以分析一下
我一般用ice调试,用windbg分析转储。
这个函数出问题没有道理

当注释掉这个函数时,机器就可以启动。
我现在只能分析DUMP内存数据,并且还是在系统启动后!
请问如果配置softice用串口进行远程调试?
谢谢!!!
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2005-06-09 10:28
你如何确定是这个函数出的错?
在这个函数设个断点,跟踪一下,有转储文件吗?可以分析一下
我一般用ice调试,用windbg分析转储。
这个函数出问题没有道理

当注释掉这个函数时,机器就可以启动。
我现在只能分析DUMP内存数据,并且还是在系统启动后!
请问如果配置softice用串口进行远程调试?
谢谢!!!
 

会用windbg分析转储数据吗?我没有用ice做过远程调试,帮助里有吧。
tanm2000
驱动牛犊
驱动牛犊
  • 注册日期2005-05-12
  • 最后登录2008-07-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望12点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-06-09 12:02
会的
!analyze -v
但如果机器在login前重启 就没有转储数据!
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2005-06-09 12:19
会的
!analyze -v
但如果机器在login前重启 就没有转储数据!

你的驱动可以动态加载吗?
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
10楼#
发布于:2005-06-09 12:22
会的
!analyze -v
但如果机器在login前重启 就没有转储数据!

建议用softice boot启动,调试你的驱动,在NdisAllocatePacketPoolEx设置个断点,跟踪一下,是不是执行这个函数,马上出问题
tanm2000
驱动牛犊
驱动牛犊
  • 注册日期2005-05-12
  • 最后登录2008-07-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望12点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-06-09 12:57
softice如何在启动时设置断点啊?
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
12楼#
发布于:2005-06-09 13:01
softice如何在启动时设置断点啊?

把你的驱动的symbols加到启动就加载,你在NdisAllocatePoolEx前加个DbgBreakPoint吧。
或者Ctrl+D尽早的进入softice,设置断点都可以。
tanm2000
驱动牛犊
驱动牛犊
  • 注册日期2005-05-12
  • 最后登录2008-07-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望12点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2005-06-09 13:05
谢谢,我试试
tanm2000
驱动牛犊
驱动牛犊
  • 注册日期2005-05-12
  • 最后登录2008-07-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望12点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2005-06-18 19:53
不可以动态加载!
我现在在NDIS PACKET中又加了个IP包头,但加上后 以太桢的CRC出错,不知道这是为什么啊,CRC是硬件加上去的吧,为什么会出错!
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
15楼#
发布于:2005-06-19 08:55
你是如何知道crc出错的? crc一般是硬件加上去的,和上层协议的处理肯定没有关系.
tanm2000
驱动牛犊
驱动牛犊
  • 注册日期2005-05-12
  • 最后登录2008-07-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望12点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2005-06-19 18:45
我用ethereal,截的包!
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
17楼#
发布于:2005-06-19 21:39
framde的crc是网卡硬件加上去的,ethereal仅仅是个协议驱动程序,只能看到网卡驱动NdisIndicatexx往上传的数据包,根本看不到这个crc。是不是ip的校验和不对。是不是和NDIS_TASK_OFFLOAD有关系?
tanm2000
驱动牛犊
驱动牛犊
  • 注册日期2005-05-12
  • 最后登录2008-07-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望12点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2005-06-20 13:23
eternal可以看到以太网桢的,上面显示的就是CRC出错,不是IP checksum这个我确定!IPchecksum是正确的。
tanm2000
驱动牛犊
驱动牛犊
  • 注册日期2005-05-12
  • 最后登录2008-07-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望12点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2005-06-21 11:11
搞定了,原来是没有更新IP包头中的IP包总长度!谢谢各位的支持!
游客

返回顶部