acceptit
驱动牛犊
驱动牛犊
  • 注册日期2002-03-26
  • 最后登录2002-08-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1829回复:11

求救!!!passthru看包内容的问题!!!!

楼主#
更多 发布于:2002-05-21 09:07
我现在想看看经过的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,为什么出现这个结果,我很疑惑,
感觉是包抓错了,又不知哪里有错???

敢请哪位大虾帮忙指点一下,在下不胜感激!!!!!!!
!!!!!!!!!!
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2002-05-21 12:20
我现在想看看经过的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,为什么出现这个结果,我很疑惑,
感觉是包抓错了,又不知哪里有错???

敢请哪位大虾帮忙指点一下,在下不胜感激!!!!!!!
!!!!!!!!!!

关于第二个问题:
你应该把Packet,buffer的结构和关系搞清楚,
p=(PUCHAR)FirsterBuffer是错的,FirstBuffer并不直接指向真正的
数据,而是应该p = VirtualAddress.
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-05-21 14:50
1。可能是你的符号文件和实际加载的驱动程序不匹配造成的,你应该确定你的符号文件和驱动程序对应!
2。楼上的说对了
acceptit
驱动牛犊
驱动牛犊
  • 注册日期2002-03-26
  • 最后登录2002-08-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于: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)


彻底糊涂了,望大家旁忙。
sirroom
驱动大牛
驱动大牛
  • 注册日期2001-07-30
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望11点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-05-21 22:42
完全有可能发生上述现象,实际跑的是一个驱动,看到的源代码是另一个。
    为什么,原因偶也不知道,但这个结果我可以断定,你必须确定你原来的驱动是真正的unload了,不然,由此引发的一系列问题真是说不清,不过我想我都遇到了,这应该也是其中一个
111
moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-05-21 23:06
我也遇到过同样的情况,我可以比较确定的说,driver和source是配合的,但想在某函数处设断点,我就没成功过。一直是从mpsend之类的地方一直找下去。挺费劲的。
按第一贴的“给分”键,给分。
acceptit
驱动牛犊
驱动牛犊
  • 注册日期2002-03-26
  • 最后登录2002-08-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-05-22 09:35
哎,还是没解决!
to sirrom:
   我已把全部的passthru.sys都替掉了,驱动也重装了。不晓得在怎样unload了,:),:(。
但dd  VirtualAddress结果还是不对,哎呀,其实,程序几乎没改,只是加了两个函数。有点烦了。:)
在帮忙指点一下吧.

to moqingsong :
确实很迷惑,不过好像我这在非函数处设断点,就不成功。

你肯定早就解决了看包的问题,看看我犯了什么错误,指点一下吧。
已经两天了,我都没进展。
.X.T.I.M.
驱动大牛
驱动大牛
  • 注册日期2001-09-22
  • 最后登录2021-08-25
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-05-22 11:06
如果真的只是想看看包的内容,用几个DBGPRINT就可以了!何必要中断这么麻烦???
<IMG src="http://www.microsoft.com/traincert/images/logos/mcp.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcdba.gif" border=0><br> <IMG src="http://www.microsoft.com/traincert/images/logos/mcse.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcsd.gif" border=0>
acceptit
驱动牛犊
驱动牛犊
  • 注册日期2002-03-26
  • 最后登录2002-08-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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)


彻底糊涂了,望大家旁忙。


bingjie
驱动小牛
驱动小牛
  • 注册日期2001-08-15
  • 最后登录2007-11-29
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-05-22 18:28
当你的某个语句调用了宏,而宏中又有很多语句是,这个语句宏就是无法设断点,它不知道停在什么地方
另外还有一种情况就是被编译优化了,有些代码被提前了,还有些代码被丢弃了,如UINT i; if( i >= 0 ){...}像这样的代码一般编译时会有警告,编译后就没有了,因为它肯定执行不到。最典型的就是一些内部变量你总是无法在softice中用watch命令查看
    有一个补救办法就是按F3查看汇编代码,在它上面设断点。
    对于变量嘛可以把它设为静态的,或是执行无法优化的操作,比如说 INT i; dbgPrint( \"%x\",&i );这样该变量总是存在的
acceptit
驱动牛犊
驱动牛犊
  • 注册日期2002-03-26
  • 最后登录2002-08-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-05-23 11:41
谢了!!!
understood some.
but.
我dd VirtualAddress
得到:
0010:8047278 0000003C 8109FC88 00000000 FFBCE690
结果仍然不对。
:),哎,不晓得为什么!!


sirroom
驱动大牛
驱动大牛
  • 注册日期2001-07-30
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望11点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-05-23 18:35
1.不要dd了,直接dbgprint
2.xp+ds2.6,好象不会有这样的问题了

111
游客

返回顶部