在协议树中将签名的 32 位值显示为双精度时出现 Wireshark 错误



在我的自定义分析器中,我将 gint16 值添加为

gint16 stmp16 = 0;
stmp16 = (gint16)tvb_get_letohs(tvb, suboffset);
proto_tree_add_int_format_value(Din_tree, hf_distanceValue, tvb, suboffset, 2, stmp16, "%lf", stmp16/100.0);
suboffset += 2;

它在数据报中正确显示 16 位有符号的 gint16 值,其标头字段描述为

&hf_distanceValue,
{ "Distance Value", "veh.in",
    FT_INT16, BASE_DEC, NULL, 0x0,
    NULL, HFILL }
},

但是当我尝试显示 32 位有符号 gint32 值时,出现错误

[Dissector bug, protocol CUSTOM: ..buildepanproto.c:4128: failed assertion "DISSECTOR_ASSERT_NOT_REACHED"]

使用 tvb_get_letohl(( 函数以相同的方式获取值,

gint32 stmp32 = 0;
stmp32 = (gint32)tvb_get_letohl(tvb, suboffset);
proto_tree_add_int_format_value(Din_tree, hf_speedValue, tvb, suboffset, 4, stmp32, "%lf", stmp32/1000000.0);
suboffset += 4;
&hf_speedValue,
{ "Speed Value", "veh.in",
    FT_INT32, BASE_DEC, NULL, 0x0,
    NULL, HFILL }
},

断言在 proto_tree_add_int_format_value(( 时失败,如果值为 gint32 类型,它在 gint16 情况下工作正常。

我不确定这是否是问题所在,但是您有 2 个具有相同过滤器名称的字段:

"Distance Value", "veh.in"
"Speed Value", "veh.in"

通常,你会有类似的东西, "veh.distance""veh.speed" ,假设您的协议的缩写是 "veh" 。 也许先尝试更改此设置以查看问题是否已解决?

最新更新