Skip to content

Commit 04f34d4

Browse files
author
Dorothy Chen
committed
display vtable in type information part 2
1 parent 7bd6341 commit 04f34d4

File tree

4 files changed

+39
-4
lines changed

4 files changed

+39
-4
lines changed

app/die_information.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from elftools.dwarf.die import DIE
1616

1717
from dwarf_expr import describe_DWARF_expr
18+
from disasm_demangler import demangle
1819

1920
# Maps of each DIE offset to the corresponding DIE.
2021
# Used when trying to follow DIE type references, i.e., a DW_TAG_typedef DIE that has a DW_AT_type
@@ -231,7 +232,7 @@ def isType(die, typeName):
231232

232233
def getVtable(typeDie):
233234
global die_list
234-
vtable = {}
235+
vtable = []
235236
for child in typeDie.iter_children():
236237
if child.tag == 'DW_TAG_subprogram' \
237238
and child.attributes.get('DW_AT_virtuality') \
@@ -246,7 +247,7 @@ def getVtable(typeDie):
246247
name = child.attributes.get('DW_AT_name').value
247248
else:
248249
name = "(Cannot determine name)"
249-
vtable[index] = name
250+
vtable.append({"index": index, "name": demangle(name)});
250251
elif elem_location.form == 'DW_FORM_loclistptr':
251252
print 'Cannot currently handle form DW_FORM_loclistptr'
252253
else:

app/static/js/disassemble.js

+4
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,10 @@ rivets.formatters.displayData = function(data) {
6565
return data != null && data != undefined;
6666
}
6767

68+
rivets.formatters.arrHasContent = function(arr) {
69+
return arr != undefined && arr.constructor === Array && arr.length > 0;
70+
}
71+
6872
var rivetsAnalysisView = rivets.bind($('#tab-type-info'),
6973
{type_ctrl: type_ctrl}
7074
);

app/static/scss/disassemble.scss

+15
Original file line numberDiff line numberDiff line change
@@ -648,5 +648,20 @@ $type-bg: rgb(178,223,219);
648648
}
649649
}
650650
}
651+
652+
.vtable {
653+
.vtable-header span {
654+
font-family: "Open Sans";
655+
}
656+
657+
.vtable-index {
658+
text-align: right;
659+
}
660+
.vtable-function {
661+
text-align: left;
662+
}
663+
}
651664
}
652665

666+
667+

app/templates/type_search.partial.html

+17-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
rv-on-click="type_ctrl.selectedTypeClicked"></span>
1616
</div>
1717
<div class="type-attr">Tag: <span rv-text="type_ctrl.selected_type.tag"></span></div>
18-
<div class="members">Members:
18+
<div class="members type-attr"
19+
rv-show="type_ctrl.selected_type.members | arrHasContent">Members:
1920
<span class='change-all collapse-all'>collapse all</span>
2021
<span class='change-all expand-all'>expand all</span>
2122
<ul>
@@ -57,9 +58,23 @@
5758
rv-hide="member.type | displayData">(type unknown)</span>
5859
<span class="type-modifiers"
5960
rv-show="member.modifiers"
60-
rv-text="member.modifiers">>
61+
rv-text="member.modifiers">
6162
</li>
6263
</ul>
64+
</div> <!-- end members -->
65+
66+
<div class="vtable type-attr"
67+
rv-show="type_ctrl.selected_type.vtable | arrHasContent">
68+
Vtable:
69+
<div class='vtable-header row'>
70+
<span class="vtable-index one column">Slot</span>
71+
<span class="vtable-function eight columns">Function</span>
72+
</div>
73+
<div class='vtable-entry entry row'
74+
rv-each-vtableentry='type_ctrl.selected_type.vtable'>
75+
<span class='vtable-index one column'>{vtableentry.index}</span>
76+
<span class='vtable-function eight columns'>{vtableentry.name}</span>
77+
</div>
6378
</div>
6479
</div>
6580

0 commit comments

Comments
 (0)