2017-02-06 1 views
0

В моей пользовательской разборе, я добавить значение gint16 вWireshark ошибка при дисплей знаковое 32-битное значение в два раза в дереве протокола

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: ..\build\epan\proto.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 случае.

ответ

0

Я не уверен, если это проблема или нет, но у вас есть 2 поля с одинаковым названием фильтра:

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

Как правило, вы бы что-то подобное, "veh.distance" и "veh.speed", предполагая, что аббревиатуру для вашего протокола "veh". Возможно, попробуйте изменить это первым, чтобы узнать, разрешена ли проблема?

+0

Спасибо за ответ. Нет, смена имени фильтра не помогла. –

Смежные вопросы