gpt4 book ai didi

c - c中的Wireshark中的字节访问器

转载 作者:太空宇宙 更新时间:2023-11-04 04:35:49 29 4
gpt4 key购买 nike

我必须访问传入的 tvb (tvbuff_t *) 中的 4 个字节的数据解剖协议(protocol)名称()函数。我使用了 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 的显示 Pane 中显示正确的 4 个字节的十进制值,而第一个函数没有,为什么?
是否有任何其他函数可以访问超过 1 个字节的数据(例如:4 个字节)?

谢谢。

最佳答案

因为您传入 offsettvb_get_bits32() 的第二个参数需要是 bits 的偏移量,而不是字节数;而 proto_tree_add_item() 的类似偏移量第四个参数应该是字节数而不是位数。

这就是为什么 tvb_get_bits32() 声明中的第二个参数被称为“bit_offset”,而不是“offset”。

想法是,当您想从 tvbuf 中提取/剖析特定位时,您可能希望从字节中间的某个位置开始。

在您的情况下,如果您想要从 offset 处的字节边界开始所有 32 位,则执行以下操作:

data = tvb_get_bits32(tvb, offset * 8, 32, ENC_BIG_ENDIAN);

关于c - c中的Wireshark中的字节访问器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30726045/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com