阅读:1829回复:11
求救!!!passthru看包内容的问题!!!!
我现在想看看经过的ip包的内容:
看过前面的所有贴子,不过还是不行。 用softice调试,发现我得网卡是走ptreceivepacket的,于是在 其中语句 NDIS_SET_PACKET_HEADER_SIZE(MyPacket, NDIS_GET_PACKET_HEADER_SIZE(Packet)); 和 NdisMIndicateReceivePacket(pAdapt->MiniportHandle, &MyPacket, 1); 之间加上 NdisQueryPacket(MyPacket,NULL,NULL,&FirsterBuffer,&TotalPacketLength); NdisQueryBuffer(FirsterBuffer,&VirtualAddress,&BufferLength); p=(PUCHAR)FirsterBuffer; if(*(p+12)==0x08 && *(p+13)==0x00 )) { u=1; } 问题: 1)为什么在u=1处设断点不行(不让设)? 2)在NdisQueryBuffer(FirsterBuffer,&VirtualAddress,&BufferLength); 处设断点,单步执行后 dd FirsterBuffer得到: 0010:80472F7C 8109EE08 00000000 FFBCE470 80472FA0 8047处本应该是0800,为什么出现这个结果,我很疑惑, 感觉是包抓错了,又不知哪里有错??? 敢请哪位大虾帮忙指点一下,在下不胜感激!!!!!!! !!!!!!!!!! |
|
沙发#
发布于:2002-05-21 12:20
我现在想看看经过的ip包的内容: 关于第二个问题: 你应该把Packet,buffer的结构和关系搞清楚, p=(PUCHAR)FirsterBuffer是错的,FirstBuffer并不直接指向真正的 数据,而是应该p = VirtualAddress. |
|
板凳#
发布于:2002-05-21 14:50
1。可能是你的符号文件和实际加载的驱动程序不匹配造成的,你应该确定你的符号文件和驱动程序对应!
2。楼上的说对了 |
|
地板#
发布于:2002-05-21 16:42
首先感谢楼上两位大哥的指点。
确实p应该指向 VirtualAddress. 不过, 按以上改正后,我dd VirtualAddress 得到: 0010:8047278 0000003C 8109FC88 00000000 FFBCE690 结果仍然不对。 :),哎,不晓得为什么!! to guardee: 另外,好像不是不匹配吧,否则,我设断点并ctrl+D后,softice就不应该被激活。是吧! 另外,我发现在不调用函数的地方都设不了断点,比如: Status = NDIS_GET_PACKET_STATUS(Packet); 我又dd p 结果提示symbol not defined (p) 彻底糊涂了,望大家旁忙。 |
|
地下室#
发布于:2002-05-21 22:42
完全有可能发生上述现象,实际跑的是一个驱动,看到的源代码是另一个。
为什么,原因偶也不知道,但这个结果我可以断定,你必须确定你原来的驱动是真正的unload了,不然,由此引发的一系列问题真是说不清,不过我想我都遇到了,这应该也是其中一个 |
|
|
5楼#
发布于:2002-05-21 23:06
我也遇到过同样的情况,我可以比较确定的说,driver和source是配合的,但想在某函数处设断点,我就没成功过。一直是从mpsend之类的地方一直找下去。挺费劲的。
|
|
|
6楼#
发布于:2002-05-22 09:35
哎,还是没解决!
to sirrom: 我已把全部的passthru.sys都替掉了,驱动也重装了。不晓得在怎样unload了,:),:(。 但dd VirtualAddress结果还是不对,哎呀,其实,程序几乎没改,只是加了两个函数。有点烦了。:) 在帮忙指点一下吧. to moqingsong : 确实很迷惑,不过好像我这在非函数处设断点,就不成功。 你肯定早就解决了看包的问题,看看我犯了什么错误,指点一下吧。 已经两天了,我都没进展。 |
|
7楼#
发布于:2002-05-22 11:06
如果真的只是想看看包的内容,用几个DBGPRINT就可以了!何必要中断这么麻烦???
|
|
|
8楼#
发布于:2002-05-22 14:37
首先感谢楼上两位大哥的指点。
确实p应该指向 VirtualAddress. 不过, 按以上改正后,我dd VirtualAddress 得到: 0010:8047278 0000003C 8109FC88 00000000 FFBCE690 结果仍然不对。 :),哎,不晓得为什么!! to guardee: 另外,好像不是不匹配吧,否则,我设断点并ctrl+D后,softice就不应该被激活。是吧! 另外,我发现在不调用函数的地方都设不了断点,比如: Status = NDIS_GET_PACKET_STATUS(Packet); 我又dd p 结果提示symbol not defined (p) 彻底糊涂了,望大家旁忙。 |
|
9楼#
发布于:2002-05-22 18:28
当你的某个语句调用了宏,而宏中又有很多语句是,这个语句宏就是无法设断点,它不知道停在什么地方
另外还有一种情况就是被编译优化了,有些代码被提前了,还有些代码被丢弃了,如UINT i; if( i >= 0 ){...}像这样的代码一般编译时会有警告,编译后就没有了,因为它肯定执行不到。最典型的就是一些内部变量你总是无法在softice中用watch命令查看 有一个补救办法就是按F3查看汇编代码,在它上面设断点。 对于变量嘛可以把它设为静态的,或是执行无法优化的操作,比如说 INT i; dbgPrint( \"%x\",&i );这样该变量总是存在的 |
|
10楼#
发布于:2002-05-23 11:41
谢了!!!
understood some. but. 我dd VirtualAddress 得到: 0010:8047278 0000003C 8109FC88 00000000 FFBCE690 结果仍然不对。 :),哎,不晓得为什么!! |
|
11楼#
发布于:2002-05-23 18:35
1.不要dd了,直接dbgprint
2.xp+ds2.6,好象不会有这样的问题了 |
|
|