aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/file-elf.c
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2015-05-24 22:12:42 -0400
committerAlexis La Goutte <alexis.lagoutte@gmail.com>2015-05-26 10:33:20 +0000
commitf91f7d4d9fcd55436943c5a2720d72c7b7ecb89f (patch)
tree8e1843b38be92cbc52a1b7b60d114fe90bc33a0f /epan/dissectors/file-elf.c
parentebcc36dc73deb061e723a504277df11e952ba8df (diff)
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.c82
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,