Интерпретация поля FT_UNIT32 как байтов - PullRequest
1 голос
/ 09 февраля 2011

Я нахожусь в процессе написания диссектора Wireshark для собственного протокола.Тем не менее, у меня есть поле, которое является 32-разрядным целым числом без знака.Это на самом деле передается в порядке байтов.Как заставить Wireshark интерпретировать его как таковой?

т.е. моя структура hf_register_info содержит

&hf_foo_length,
{ "Length", "foo.length", FT_UINT32, BASE_DEC,
NULL, 0x0, NULL, HFILL }

А в функции рассечения я вызываю

proto_tree_add_item(foo_tree, hf_foo_length, tvb, offset, 4, FALSE);

1 Ответ

2 голосов
/ 09 февраля 2011

Чтобы ответить на мой последний вопрос. Я обнаружил, что если последний параметр proto_tree_add_item, если он не равен нулю, заставит его интерпретировать поле как little-endian.

См. Proto.h

/*
 * We might also, in the future, want to allow a field specifier to
 * indicate the encoding of the field, or at least its default
 * encoding, as most fields in most protocols always use the
 * same encoding (although that's not true of all fields, so we
 * still need to be able to specify that at run time).
 *
 * So, for now, we define ENC_BIG_ENDIAN and ENC_LITTLE_ENDIAN as
 * bit flags, to be combined, in the future, with other information
 * to specify the encoding in the last argument to
 * proto_tree_add_item(), and possibly to specify in a field
 * definition (e.g., ORed in with the type value).
 *
 * Currently, proto_tree_add_item() treats its last argument as a
 * Boolean - if it's zero, the field is big-endian, and if it's non-zero,
 * the field is little-endian - and other code in epan/proto.c does
 * the same.  We therefore define ENC_BIG_ENDIAN as 0x00000000 and
 * ENC_LITTLE_ENDIAN as 0x80000000 - we're using the high-order bit
 * so that we could put a field type and/or a value such as a character
 * encoding in the lower bits.
 */
...