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中的内容,并可以在解码响应包时提供使用。
例子
解码器编程非常象汇编语言编程,有很长的汇编指令。下面的例子帮助说明,我们是如何编程
解码某些协议的。
这是一个典型的简单解码指令:
这个指令解释为:用16进制处理接下来的16个比特位,高次序位值是0,所以假定一个”0x”(忽
略剩下的位值), 保存这16个bit到全局变量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进制显示值
后,一个ShortDDP或LongDDP的翻译字串,根据LAP类型是等于还是2,以消息格式各自显示。
后面,无论类型是1还是2,解码进程会各自跳转到名为ShortDDP 或LongDDP的解码器。
例子的最好来源是我们在产品中提供的解码器。如果你使用微软的Windows系统,你可以使用文本编辑器如
Notepad/ WordPad/查看解码器.如果你使用MacOS,你可以使用象BBEdit一样的文本编辑器来查看解码器。
Zenith
2007/6/6
阅读(1718) | 评论(0) | 转发(0) |