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>
This commit is contained in:
Michael Mann 2015-05-24 22:12:42 -04:00 committed by Alexis La Goutte
parent ebcc36dc73
commit f91f7d4d9f
1 changed files with 63 additions and 19 deletions

View File

@ -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,