我从传入的tvb(tvbuff_t *)访问4个字节的数据
dissect-protocolname()函数。
我使用了2个功能:
1. data = tvb_get_bits32(tvb, offset, 32, ENC_BIG_ENDIAN);
2. proto_tree_add_item(foo_tree, hf_foo_data, tvb, offset, 4, ENC_BIG_ENDIAN);
来自第一个函数的返回值我用
proto_tree_add_uint(foo_tree, hf_foo_data1, tvb, offset, 4, data);
两者都在wireshark的第二个显示窗格中显示不同的结果。我也没有改变偏移量。
因为偏移量在两者中都没有变化,并且两者都访问4个字节的数据。那为什么两者都显示出不同的结果呢?
我需要一个变量中的4个字节的数据来操纵哪个第一个函数正在做但返回的值不正确为什么?
第二个函数在wireshark的显示窗格中显示4个字节的正确十进制值,而第一个没有,为什么?
是否还有其他功能可以访问超过1个字节的数据(例如:4个字节)?
感谢。
答案 0 :(得分:0)
因为传递tvb_get_bits32()
的{{1}}的第二个参数需要是位的偏移量,而不是字节;而offset
的类似偏移第四个参数应该是字节数而不是位数。
这就是为什么proto_tree_add_item()
声明中的第二个参数被称为“ tvb_get_bits32()
”,而不是“bit_offset
”。
这个想法是,当你想从tvbuf中提取/剖析特定位时,你可能想要在一个字节的中间某处开始。
在你的情况下,如果你想要offset
的字节边界的所有32位,那么这样做:
offset