jenk names, git repo broke wtf

This commit is contained in:
George Hotz 2014-09-09 12:28:09 +00:00
parent 78f7ee1c21
commit 3f36de6d10
8 changed files with 118 additions and 72 deletions

View File

@ -24,6 +24,18 @@ import os
# function stack frames
# decompilation
@socketio.on('gettagsa', namespace='/qira')
@socket_method
def gettagsa(arr):
ret = []
for i in arr:
i = fhex(i)
if len(program.tags[i]) != 0:
# a bit of a hack, this is so javascript can display it
program.tags[i]['address'] = ghex(i)
ret.append(program.tags[i])
emit('tagsa', ret)
@socketio.on('gettags', namespace='/qira')
@socket_method
def gettags(start, length):

View File

@ -1,4 +1,4 @@
regcolors = ['#59AE3F', '#723160', '#2A80A2', '#9E66BD', '#BC8D6B', '#3F3EAC', '#BC48B8', '#6B7C76', '#5FAC7F', '#A69B71', '#874535', '#AD49BF', '#73356F', '#55A4AC', '#988590', '#505C62', '#404088', '#56726B', '#BAAC62', '#454066', '#BCAEAA', '#4E7F6A', '#3960B5', '#295231', '#3B37A5', '#6A9191', '#976394', '#7F957D', '#B7AFBD', '#BD4A70', '#A35169', '#2F2D95', '#8879A8', '#8D3A8E', '#636E7C', '#82688D', '#9FA893', '#2A6885', '#812C87', '#568E71', '#6FA0B2', '#7B7928', '#57BD86', '#6BBC9A', '#807FB3', '#922AAD', '#AB5D98', '#9C943A', '#796880', '#294870', '#528054', '#4ABBA2', '#87437B', '#AA4E73', '#2893AC', '#5AA383', '#A5714D', '#648186', '#68BA37', '#466A89', '#5CB871', '#3D8267', '#28B930', '#5E6C6F', '#5C6772', '#389E58', '#34B69B', '#3CA46A', '#4F4691', '#4D48A1', '#836CB1', '#2B6948', '#4F42BB', '#549B68', '#69B563', '#B39F5C', '#A37841', '#7858B4', '#577244', '#2B7DAD'];
regcolors = ['#60AE3F', '#723160', '#2A80A2', '#9E66BD', '#BC8D6B', '#3F3EAC', '#BC48B8', '#6B7C76', '#5FAC7F', '#A69B71', '#874535', '#AD49BF', '#73356F', '#55A4AC', '#988590', '#505C62', '#404088', '#56726B', '#BAAC62', '#454066', '#BCAEAA', '#4E7F6A', '#3960B5', '#295231', '#3B37A5', '#6A9191', '#976394', '#7F957D', '#B7AFBD', '#BD4A70', '#A35169', '#2F2D95', '#8879A8', '#8D3A8E', '#636E7C', '#82688D', '#9FA893', '#2A6885', '#812C87', '#568E71', '#6FA0B2', '#7B7928', '#57BD86', '#6BBC9A', '#807FB3', '#922AAD', '#AB5D98', '#9C943A', '#796880', '#294870', '#528054', '#4ABBA2', '#87437B', '#AA4E73', '#2893AC', '#5AA383', '#A5714D', '#648186', '#68BA37', '#466A89', '#5CB871', '#3D8267', '#28B930', '#5E6C6F', '#5C6772', '#389E58', '#34B69B', '#3CA46A', '#4F4691', '#4D48A1', '#836CB1', '#2B6948', '#4F42BB', '#549B68', '#69B563', '#B39F5C', '#A37841', '#7858B4', '#577244', '#2B7DAD'];
function p(a) { console.log(a); }
//function DA(a) { p("DA: "+a); }
@ -59,72 +59,6 @@ Deps.autorun(function() { DA("history");
// ** end history ***
var escapeHTML = (function () {
'use strict';
var chr = { '"': '&quot;', '&': '&amp;', '<': '&lt;', '>': '&gt;' };
return function (text) {
return text.replace(/[\"&<>]/g, function (a) { return chr[a]; });
};
}());
function highlight_addresses(a) {
// no XSS :)
var d = escapeHTML(a);
var re = /0x[0123456789abcdef]+/g;
var m = d.match(re);
if (m !== null) {
// make matches unique?
m = m.filter(function (v,i,a) { return a.indexOf(v) == i });
m.map(function(a) {
var cl = get_data_type(a);
if (cl == "") {
d = d.replace(a, "<span class='hexnumber'>"+a+"</span>");
} else {
d = d.replace(a, "<span class='"+cl+"'>"+a+"</span>");
}
});
}
// does this work outside templates?
return d;
}
function highlight_instruction(a) {
var ret = highlight_addresses(a);
// dim colors
function fc(a) {
var df = 1.4;
// heard of loops?
var r = a.substr(1,2);
var g = a.substr(3,2);
var b = a.substr(5,2);
r = Math.floor(parseInt(r, 16)/df);
g = Math.floor(parseInt(g, 16)/df);
b = Math.floor(parseInt(b, 16)/df);
return "#"+hex2(r)+hex2(g)+hex2(b);
}
// highlight registers
if (arch !== undefined) {
for (var i = 0; i < arch[0].length; i++) {
var rep = '<span style="color: '+fc(regcolors[i])+'" class="data_'+hex(i*arch[1])+'">'+arch[0][i]+'</span>';
ret = ret.replace(arch[0][i], rep);
var rep = '<span style="color: '+fc(regcolors[i])+'" class="data_'+hex(i*arch[1])+'">'+arch[0][i].toLowerCase()+'</span>';
ret = ret.replace(arch[0][i].toLowerCase(), rep);
}
}
// highlight opcode
var i = 0;
for (i = 0; i < ret.length; i++) {
if (ret[i] == ' ' || ret[i] == '\t') {
break;
}
}
return '<span class="op">' + ret.substr(0, i) + '</span>' + ret.substr(i)
}
function get_data_type(v) {
if (typeof v == "number") throw "numbers no longer supported here";
// haxx

View File

@ -0,0 +1,93 @@
var escapeHTML = (function () {
'use strict';
var chr = { '"': '&quot;', '&': '&amp;', '<': '&lt;', '>': '&gt;' };
return function (text) {
return text.replace(/[\"&<>]/g, function (a) { return chr[a]; });
};
}());
function highlight_addresses(a) {
// no XSS :)
var d = escapeHTML(a);
var re = /0x[0123456789abcdef]+/g;
var m = d.match(re);
if (m !== null) {
// make matches unique?
m = m.filter(function (v,i,a) { return a.indexOf(v) == i });
m.map(function(a) {
var cl = get_data_type(a);
if (cl == "") {
d = d.replace(a, "<span class='hexnumber'>"+a+"</span>");
} else {
if (cl == "datainstruction") {
cl += " iaddr iaddr_"+a;
}
d = d.replace(a, "<span class='"+cl+"'>"+a+"</span>");
}
});
}
// does this work outside templates?
return d;
}
function highlight_instruction(a) {
var ret = highlight_addresses(a);
// dim colors
function fc(a) {
var df = 1.4;
// heard of loops?
var r = a.substr(1,2);
var g = a.substr(3,2);
var b = a.substr(5,2);
r = Math.floor(parseInt(r, 16)/df);
g = Math.floor(parseInt(g, 16)/df);
b = Math.floor(parseInt(b, 16)/df);
return "#"+hex2(r)+hex2(g)+hex2(b);
}
// highlight registers
if (arch !== undefined) {
for (var i = 0; i < arch[0].length; i++) {
var rep = '<span style="color: '+fc(regcolors[i])+'" class="data_'+hex(i*arch[1])+'">'+arch[0][i]+'</span>';
ret = ret.replace(arch[0][i], rep);
var rep = '<span style="color: '+fc(regcolors[i])+'" class="data_'+hex(i*arch[1])+'">'+arch[0][i].toLowerCase()+'</span>';
ret = ret.replace(arch[0][i].toLowerCase(), rep);
}
}
// highlight opcode
var i = 0;
for (i = 0; i < ret.length; i++) {
if (ret[i] == ' ' || ret[i] == '\t') {
break;
}
}
return '<span class="op">' + ret.substr(0, i) + '</span>' + ret.substr(i)
}
stream = io.connect(STREAM_URL);
function on_tagsa(tags) { DS("tagsa");
//p(tags);
for (var i=0;i<tags.length;i++) {
$(".iaddr_"+tags[i]['address']).each(function() {
if (tags[i]['name'] !== undefined) {
$(this).addClass("name");
$(this).html(tags[i]['name']);
}
});
}
} stream.on('tagsa', on_tagsa);
function replace_names() {
var addrs = [];
$(".iaddr").each(function() {
var l = this.className.split(" ").filter(function(x) { return x.substr(0,6) == "iaddr_"; });
if (l.length != 1) return;
addrs.push(l[0].split("_")[1]);
});
stream.emit('gettagsa', addrs);
}

View File

@ -28,8 +28,12 @@ function do_ida_socket(callme) {
Deps.autorun(function() { DA("send setaddress to ida");
var iaddr = Session.get('iaddr');
do_ida_socket(function() {
cmd = 'setaddress '+iaddr
ws.send(cmd);
cmd = 'setaddress '+iaddr;
try {
ws.send(cmd);
} catch(err) {
// nothing
}
});
});

View File

@ -3,7 +3,7 @@ stream = io.connect(STREAM_URL);
// arch is public data
arch = undefined;
function on_arch(msg) { DS("arch");
p(msg);
//p(msg);
arch = msg;
} stream.on("arch", on_arch);
@ -38,13 +38,14 @@ function on_instructions(msg) { DS("instructions");
'<div class="change '+(ins.slice ? "halfhighlight": "")+' clnum clnum_'+ins.clnum+'">'+ins.clnum+'</div> '+
// hacks, hexdumpdatainstruction for dblclick handler
'<span class="hexdumpdatainstruction iaddr iaddr_'+ins.address+'">'+ins.address+'</span> '+
'<span class="name">'+ins.name+'</span> '+
//'<span class="name">'+ins.name+'</span> '+
'<div class="instructiondesc">'+highlight_instruction(ins.instruction)+'</div> '+
'<span class="comment">'+(ins.comment !== undefined ? ins.comment : "")+'</span>'+
'</div>';
}
$('#idump').html(idump);
rehighlight();
replace_names();
} stream.on('instructions', on_instructions);
Deps.autorun(function() { DA("emit getinstructions");

View File

@ -76,5 +76,6 @@ function on_tags(addrs) { DS("tags");
graph.render();
rehighlight();
replace_names();
} stream.on('tags', on_tags);

View File

@ -10,6 +10,7 @@
<script type="text/javascript" src="/client/compatibility/base.js"></script>
<script type="text/javascript" src="/client/compatibility/bignum.js"></script>
<script type="text/javascript" src="/client/compatibility/socket.io.min.js"></script>
<script type="text/javascript" src="/client/compatibility/highlight.js"></script>
<script type="text/javascript" src="/client/controls.js"></script>
<script type="text/javascript" src="/client/ida.js"></script>
<script type="text/javascript" src="/client/idump.js"></script>

View File

@ -100,7 +100,7 @@
}
.name {
color: purple;
color: purple !important;
background-color: #aaaaaa;
}
.comment {