Skip to content

Commit 8f40bf4

Browse files
author
Dan Harel
committed
Added ability to load rip-relative addresses as C Strings
1 parent 8100305 commit 8f40bf4

File tree

4 files changed

+50
-21
lines changed

4 files changed

+50
-21
lines changed

app.py

+6
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,12 @@ def get_reg_contents():
253253
address = int(request.args['address'])
254254
return jsonify(executable.ex.get_function_reg_contents(address))
255255

256+
# expects {"file_offset": <int>}
257+
@app.route('/get_data_as_cstring', methods=["GET"])
258+
def get_data_as_cstring():
259+
file_offset = int(request.args['file_offset'])
260+
return executable.ex.get_data_as_cstring(file_offset)
261+
256262
# debug=True auto reloads whenever server code changes
257263
app.run(debug=True)
258264

executable.py

+17
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ def get_all_functions(self):
6464
def get_symbol_by_addr(self, addr):
6565
self.raise_not_implemented()
6666

67+
def get_data_as_cstring(self, file_offset):
68+
self.raise_not_implemented()
6769

6870
"""
6971
ELF executable
@@ -423,6 +425,21 @@ def get_sub_symbol_by_offset(self, symbol_name, offset, instr_addr):
423425
offset,
424426
instr_addr)
425427

428+
def get_data_as_cstring(self, file_offset):
429+
cstring = ""
430+
index = 0
431+
curr_byte = self.get_bytes(file_offset, 1)
432+
while curr_byte != '\x00':
433+
cstring += curr_byte
434+
index += 1
435+
if index > 128:
436+
break
437+
curr_byte = self.get_bytes(file_offset + index, 1)
438+
print repr(cstring)
439+
print index
440+
return repr(cstring)
441+
442+
426443
"""
427444
Mach-o executable
428445
"""

static/js/disassemble.js

+27-3
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
var URL_DIE_INFO = "/get_die_info";
1919
var URL_FUNCTION_ASSEMBLY = '/get_function_assembly';
2020
var URL_REG_CONTENTS = '/get_reg_contents';
21+
var URL_GET_CSTRING = '/get_data_as_cstring';
2122

2223
// enums for register tracking/highlighting
2324
var READS_REG = 0;
@@ -75,15 +76,37 @@ $(function() {
7576
name: "Referenced Value (ASCII)",
7677
callback: function(key, opt) {
7778
ripCallback(key, opt, '.rip-value-ascii');
78-
7979
}
8080
},
8181
value_hex: {
82-
name: "References Value (Hex)",
82+
name: "Referenced Value (Hex)",
8383
callback: function(key, opt) {
8484
ripCallback(key, opt, '.rip-value-hex');
8585
}
8686
},
87+
cstring: {
88+
name: "Referenced Value (cString)",
89+
callback: function(key, opt) {
90+
$(opt.$trigger.context).find('rip-value-cstring').html("Loading...");
91+
ripCallback(key, opt, '.rip-value-cstring');
92+
var cString;
93+
$.get(
94+
URL_GET_CSTRING,
95+
{file_offset: parseInt(opt.$trigger.context.getAttribute('value'))}
96+
)
97+
.done(function(data) {
98+
cString = data;
99+
})
100+
.fail(function() {
101+
cString = "Unable to get cString from this value";
102+
console.log("Failed");
103+
})
104+
.always(function() {
105+
console.log(cString);
106+
$(opt.$trigger.context).find('.rip-value-cstring')[0].innerHTML = cString;
107+
});
108+
}
109+
},
87110
symbol: {
88111
name: "Symbol",
89112
callback: function(key, opt) {
@@ -159,11 +182,12 @@ function get_function_assembly() {
159182
var _op_str = i.op_str;
160183
if (i['rip']) {
161184
var replacementStr = "";
162-
replacementStr += '<span class="rip">[';
185+
replacementStr += '<span class="rip" value="' + i['rip-resolved'] + '">[';
163186
replacementStr += '<span class="rip-default">rip + ' + i['rip-offset'] + '</span>';
164187
replacementStr += '<span class="rip-resolved" hidden>' + i['rip-resolved'] + '</span>';
165188
replacementStr += '<span class="rip-value-ascii" hidden>"' + i['rip-value-ascii'] + '"</span>';
166189
replacementStr += '<span class="rip-value-hex" hidden>' + i['rip-value-hex'] + '</span>';
190+
replacementStr += '<span class="rip-value-cstring" hidden></span>';
167191
replacementStr += ']</span>';
168192
i.op_str = i.op_str.replace(/\[.*\]/, replacementStr);
169193
}

static/js/number_conversion.js

-18
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,9 @@ $(function() {
6969
unsignedDec64: {
7070
name: "64-bit Unsigned Decimal"
7171
},
72-
unsignedDec128: {
73-
name: "128-bit Unsigned Decimal"
74-
},
7572
twosCompDec64: {
7673
name: "64-bit Signed 2's Complement Decimal"
7774
},
78-
twosCompDec128: {
79-
name: "128-bit Signed 2's Complement Decimal"
80-
},
8175
binary: {
8276
name: "Binary"
8377
},
@@ -115,15 +109,9 @@ function getConvertedVal(startVal, base, key) {
115109
case "unsignedDec64":
116110
binString = unsignedDecToBin(startVal, 64);
117111
break;
118-
case "unsignedDec128":
119-
binString = unsignedDecToBin(startVal, 128);
120-
break;
121112
case "twosCompDec64":
122113
binString = signedDecToBin(startVal, 64);
123114
break;
124-
case "twosCompDec128":
125-
binString = signedDecToBin(startVal, 128);
126-
break;
127115
case "binary":
128116
binString = startVal;
129117
break;
@@ -142,15 +130,9 @@ function getConvertedVal(startVal, base, key) {
142130
case "unsignedDec64":
143131
newVal = binToUnsignedDec(binString, 64);
144132
break;
145-
case "unsignedDec128":
146-
newVal = binToUnsignedDec(binString, 128);
147-
break;
148133
case "twosCompDec64":
149134
newVal = binToSignedDec(binString, 64);
150135
break;
151-
case "twosCompDec128":
152-
newVal = binToSignedDec(binString, 128);
153-
break;
154136
case "binary":
155137
newVal = binString;
156138
break;

0 commit comments

Comments
 (0)