Chinaunix首页 | 论坛 | 博客
  • 博客访问: 429332
  • 博文数量: 101
  • 博客积分: 1547
  • 博客等级: 上尉
  • 技术积分: 1072
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-12 23:46
个人简介

music,code,dialog,rest

文章分类

全部博文(101)

文章存档

2023年(8)

2022年(25)

2021年(6)

2020年(2)

2019年(6)

2018年(4)

2017年(5)

2016年(20)

2015年(4)

2014年(2)

2013年(1)

2012年(1)

2011年(1)

2010年(1)

2009年(2)

2007年(10)

2006年(3)

分类: 网络与安全

2007-06-06 09:06:09

WildPackets解码器语言参考 中文版, 第三部分
 
超级全局变量
 
另一个使用会话型解码的方法是使用超级全局变量。这些变量用来在一个包和下一个包之间传递
信息。例如,我们说一个请求包使用一个标志来决定需要响应的类型。响应包然后需要那些标志
来进行正确的解码。以前在这样的解码器中存在限制因素。有了超级全局变量,这样的信息就能
从一个包传递到下一个包。
 
一个使用超级全局变量的例子:

Request:
        ...
        DLNG 40000000 1 90 c2 Volume Request Flags:;
         CEQU 0 1 0 14 Return the volume name with the volume number;
         CEQU 1 1 0 14 Do not return the volume name with the volume number;
        s[1] = g[1]; // save the global 1
's value in the super global
        ...

Response:
        ...
        DLNG 0 1 90 c2 Next Volume Number:;
        g[1] = s[1]; // get the super global'
s value in global 1
        if (g[1] == 0)
        {
               NCP::VolMntStructWithName;
        }
        if (g[1] != 0)
        {
               NCP::VolMntStruct;
        }
        ...

 
根据请求包中VolumeRequestFlags标志,响应包将为Volume Struct提供或不提供一个名字。这个
超级全局变量保存了在请求包解码时全局变量1中的内容,并可以在解码响应包时提供使用。
 
例子
 
解码器编程非常象汇编语言编程,有很长的汇编指令。下面的例子帮助说明,我们是如何编程
解码某些协议的。
这是一个典型的简单解码指令:

HWRD 0 2 90 c2 Checksum:

 
这个指令解释为:用16进制处理接下来的16个比特位,高次序位值是0,所以假定一个”0x”(
略剩下的位值) 保存这16bit到全局变量2中(其实这里的2是全局变量索引),并格式化显
示为:新行,第二列标签,数据标签格式,带给定字串,数据以普通格式,在24开始显示。
 
这里有另一个例子:

HBYT 0 1 90 c2 AppleTalk Type:;
CEQU 1 1 0 14 Short DDP;
TTST 0 0 0 0 Short DDP;
CEQU 2 1 0 14 Long DDP;
TTST 0 0 0 0 Long DDP;

 
这些指令对一个在AppleTalkDDP 数据包中,包含LAP类型的字节进行解码。以16进制显示值
后,一个ShortDDPLongDDP的翻译字串,根据LAP类型是等于还是2,以消息格式各自显示。
后面,无论类型是1还是2,解码进程会各自跳转到名为ShortDDP LongDDP的解码器。
 
例子的最好来源是我们在产品中提供的解码器。如果你使用微软的Windows系统,你可以使用文本编辑器如
Notepad/ WordPad/查看解码器.如果你使用MacOS,你可以使用象BBEdit一样的文本编辑器来查看解码器。
 
 
Zenith
2007/6/6
 
 
 
阅读(1678) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~