diff options
author | Michael Mann <mmann78@netscape.net> | 2015-05-24 22:12:42 -0400 |
---|---|---|
committer | Alexis La Goutte <alexis.lagoutte@gmail.com> | 2015-05-26 10:33:20 +0000 |
commit | f91f7d4d9fcd55436943c5a2720d72c7b7ecb89f (patch) | |
tree | 8e1843b38be92cbc52a1b7b60d114fe90bc33a0f /epan/dissectors/file-elf.c | |
parent | ebcc36dc73deb061e723a504277df11e952ba8df (diff) | |
download | wireshark-f91f7d4d9fcd55436943c5a2720d72c7b7ecb89f.tar.gz |
Remove proto_tree_add_text from file-elf.c
Change-Id: Ib7df1e2c40ad86866f5a3d6902a7a92144028be7
Reviewed-on: https://code.wireshark.org/review/8620
Reviewed-by: Michael Mann <mmann78@netscape.net>
Petri-Dish: Michael Mann <mmann78@netscape.net>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com>
Diffstat (limited to 'epan/dissectors/file-elf.c')
-rw-r--r-- | epan/dissectors/file-elf.c | 82 |
1 files changed, 63 insertions, 19 deletions
diff --git a/epan/dissectors/file-elf.c b/epan/dissectors/file-elf.c index fa142a2cfe..57267f4e6d 100644 --- a/epan/dissectors/file-elf.c +++ b/epan/dissectors/file-elf.c @@ -41,6 +41,13 @@ static dissector_handle_t elf_handle; static int proto_elf = -1; static int hf_elf_magic_bytes = -1; +static int hf_elf_file_size = -1; +static int hf_elf_header_segment_size = -1; +static int hf_elf_blackholes_size = -1; +static int hf_elf_blackhole_size = -1; +static int hf_elf_overlapping_size = -1; +static int hf_elf_segment = -1; +static int hf_elf_entry_bytes = -1; static int hf_elf_file_class = -1; static int hf_elf_data_encoding = -1; static int hf_elf_file_version = -1; @@ -1120,7 +1127,7 @@ dissect_elf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) static const guint8 magic[] = { 0x7F, 'E', 'L', 'F'}; gint offset = 0; proto_tree *main_tree; - proto_item *main_item; + proto_item *main_item, *ti; proto_tree *header_tree; proto_item *header_item; proto_tree *program_header_tree; @@ -1167,7 +1174,7 @@ dissect_elf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) guint64 strtab_offset = 0; guint64 dynstr_offset = 0; - if (tvb_length(tvb) < 52) + if (tvb_captured_length(tvb) < 52) return 0; if (tvb_memeql(tvb, 0, magic, sizeof(magic)) != 0) @@ -1403,7 +1410,7 @@ dissect_elf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) name = wmem_strdup_printf(wmem_packet_scope(), "ProgramHeaderEntry #%u", phnum - i_16 - 1); - proto_tree_add_text(ph_entry_tree, tvb, value_guard(p_offset), value_guard(segment_size), "Segment"); + proto_tree_add_bytes_format(ph_entry_tree, hf_elf_segment, tvb, value_guard(p_offset), value_guard(segment_size), NULL, "Segment"); file_size += segment_size; @@ -1655,8 +1662,8 @@ dissect_elf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) if (sh_entsize > 0) { next_offset = value_guard(segment_offset); for (i = 1; i < (segment_size / sh_entsize) + 1; i += 1) { - proto_tree_add_text(segment_tree, tvb, next_offset, - value_guard(sh_entsize), "Entry #%d ", i); + proto_tree_add_bytes_format(segment_tree, hf_elf_entry_bytes, tvb, next_offset, + value_guard(sh_entsize), NULL, "Entry #%d ", i); next_offset += value_guard(sh_entsize); } } @@ -1692,40 +1699,42 @@ dissect_elf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) /* blackhole */ len = (guint) (segment_info[i].offset - segment_info[i - 1].offset - segment_info[i - 1].size); - proto_tree_add_text(blackhole_tree, tvb, value_guard(segment_info[i].offset - len), len, "Blackhole between: %s and %s, size: %u", - segment_info[i - 1].name, segment_info[i].name, len); + ti = proto_tree_add_uint_format(blackhole_tree, hf_elf_blackhole_size, tvb, value_guard(segment_info[i].offset - len), 1, len, + "Blackhole between: %s and %s, size: %u", segment_info[i - 1].name, segment_info[i].name, len); + proto_item_set_len(ti, len); + } else if (segment_info[i - 1].offset + segment_info[i - 1].size > segment_info[i].offset) { /* overlapping */ len = (guint) (segment_info[i - 1].offset + segment_info[i - 1].size - segment_info[i].offset); - proto_tree_add_text(overlapping_tree, tvb, value_guard(segment_info[i - 1].offset + segment_info[i - 1].size - len), len, "Overlapping between: %s and %s, size: %u", - segment_info[i - 1].name, segment_info[i].name, len); + ti = proto_tree_add_uint_format(overlapping_tree, hf_elf_overlapping_size, tvb, value_guard(segment_info[i - 1].offset + segment_info[i - 1].size - len), 1, len, + "Overlapping between: %s and %s, size: %u", segment_info[i - 1].name, segment_info[i].name, len); + proto_item_set_len(ti, len); file_size -= len; } } - if (segment_info[area_counter - 1].offset + segment_info[area_counter - 1].size < tvb_length(tvb)) { - len = tvb_length(tvb) - (guint) (segment_info[area_counter - 1].offset - segment_info[area_counter - 1].size); + if (segment_info[area_counter - 1].offset + segment_info[area_counter - 1].size < tvb_captured_length(tvb)) { + len = tvb_captured_length(tvb) - (guint) (segment_info[area_counter - 1].offset - segment_info[area_counter - 1].size); - proto_tree_add_text(blackhole_tree, tvb, + ti = proto_tree_add_uint_format(blackhole_tree, hf_elf_blackhole_size, tvb, value_guard(segment_info[area_counter - 1].offset + - segment_info[area_counter - 1].size), + segment_info[area_counter - 1].size), 1, len, "Blackhole between: %s and <EOF>, size: %u", segment_info[area_counter - 1].name, len); + proto_item_set_len(ti, len); } - proto_tree_add_text(generated_tree, tvb, 0, 0, "File size: %i", tvb_length(tvb)); - proto_tree_add_text(generated_tree, tvb, 0, 0, "Header size + all segment size: %i", (int) file_size); - proto_tree_add_text(generated_tree, tvb, 0, 0, "Total blackholes size: %i", tvb_length(tvb) - (int) file_size); + proto_tree_add_uint(generated_tree, hf_elf_file_size, tvb, 0, 0, tvb_captured_length(tvb)); + proto_tree_add_uint(generated_tree, hf_elf_header_segment_size, tvb, 0, 0, (guint)file_size); + proto_tree_add_uint(generated_tree, hf_elf_blackholes_size, tvb, 0, 0, tvb_captured_length(tvb) - (guint)file_size); col_clear(pinfo->cinfo, COL_INFO); col_add_str(pinfo->cinfo, COL_INFO, "(ELF)"); /* We jumping around offsets, so treat as bytes as read */ - offset = tvb_length(tvb); - - return offset; + return tvb_captured_length(tvb); } static gboolean @@ -1747,6 +1756,41 @@ proto_register_elf(void) FT_BYTES, BASE_NONE, NULL, 0x00, NULL, HFILL } }, + { &hf_elf_file_size, + { "File size", "elf.file_size", + FT_UINT32, BASE_DEC, NULL, 0x00, + NULL, HFILL } + }, + { &hf_elf_header_segment_size, + { "Header size + all segment size", "elf.header_segment_size", + FT_UINT32, BASE_DEC, NULL, 0x00, + NULL, HFILL } + }, + { &hf_elf_blackholes_size, + { "Total blackholes size", "elf.blackholes_size", + FT_UINT32, BASE_DEC, NULL, 0x00, + NULL, HFILL } + }, + { &hf_elf_blackhole_size, + { "Blackhole size", "elf.blackhole_size", + FT_UINT32, BASE_DEC, NULL, 0x00, + "Blackhole size between sections or program headers", HFILL } + }, + { &hf_elf_overlapping_size, + { "Overlapping size", "elf.overlapping_size", + FT_UINT32, BASE_DEC, NULL, 0x00, + "Overlapping size between sections or program headers", HFILL } + }, + { &hf_elf_segment, + { "Segment", "elf.segment", + FT_BYTES, BASE_NONE, NULL, 0x00, + NULL, HFILL } + }, + { &hf_elf_entry_bytes, + { "Entry", "elf.entry_bytes", + FT_BYTES, BASE_NONE, NULL, 0x00, + NULL, HFILL } + }, { &hf_elf_file_class, { "File Class", "elf.file_class", FT_UINT8, BASE_HEX, VALS(class_vals), 0x00, |