From f5188d6d478a14a427b69175192a64060c2f4e2f Mon Sep 17 00:00:00 2001 From: pancake Date: Wed, 9 Oct 2013 02:53:25 +0200 Subject: [PATCH] Enhace graphs and handle relocs in webui --- libr/core/bin.c | 14 +-- libr/core/cmd.c | 5 +- libr/core/cmd_info.c | 1 + shlr/www/enyo/index.js | 2 +- shlr/www/enyo/js/r2.js | 5 ++ shlr/www/enyo/js/rightpanel.js | 6 ++ shlr/www/graph/index.html | 4 + shlr/www/graph/js-graph-it.js | 151 ++++++++++++++++++++------------- 8 files changed, 115 insertions(+), 73 deletions(-) diff --git a/libr/core/bin.c b/libr/core/bin.c index ee5780ea45..f2d9446f93 100644 --- a/libr/core/bin.c +++ b/libr/core/bin.c @@ -389,17 +389,17 @@ static int bin_relocs (RCore *r, int mode, ut64 baddr, int va) { r_cons_printf ("["); r_list_foreach (relocs, iter, reloc) { if (reloc->import) - r_cons_printf ("%s{\"name\":\"%s\",", iter->p?",":""); + r_cons_printf ("%s{\"name\":\"%s\",", iter->p?",":"", reloc->import->name); else r_cons_printf ("%s{\"name\":null,", iter->p?",":""); r_cons_printf ("\"type\":\"%s\"," - "\"addend\":%"PFMT64d"," - "\"offset\":%"PFMT64d"}", - iter->p?",":"", - reloc->import->name, + "\"offset\":%"PFMT64d"," + //"\"addend\":%"PFMT64d"," + "\"physical\":%"PFMT64d"}", bin_reloc_type_name (reloc), - reloc->addend, - baddr+reloc->rva); + baddr+reloc->rva, + //reloc->addend, + reloc->offset); } r_cons_printf ("]"); } else diff --git a/libr/core/cmd.c b/libr/core/cmd.c index c1412e6751..2a1803a739 100644 --- a/libr/core/cmd.c +++ b/libr/core/cmd.c @@ -1507,12 +1507,9 @@ R_API int r_core_flush(void *user, const char *cmd) { R_API char *r_core_cmd_str_pipe(RCore *core, const char *cmd) { char *s, *tmp; - eprintf ("SANDBOXED PIPE (%s)\n", cmd); r_sandbox_disable (1); - if (r_sandbox_enable (0)) { - r_sandbox_disable (0); + if (r_sandbox_enable (0)) return r_core_cmd_str (core, cmd); - } r_cons_reset (); if (r_file_mkstemp ("cmd", &tmp)) { char *_cmd = strdup (cmd); diff --git a/libr/core/cmd_info.c b/libr/core/cmd_info.c index a7a3e82406..25d67b23c6 100644 --- a/libr/core/cmd_info.c +++ b/libr/core/cmd_info.c @@ -136,6 +136,7 @@ static int cmd_info(void *data, const char *input) { " il ; libraries\n" " is ; symbols\n" " iS ; sections\n" + " ir ; relocs\n" " iz ; strings\n"); break; case '*': mode = R_CORE_BIN_RADARE; diff --git a/shlr/www/enyo/index.js b/shlr/www/enyo/index.js index 556117339c..6eb8b9b67c 100644 --- a/shlr/www/enyo/index.js +++ b/shlr/www/enyo/index.js @@ -1,2 +1,2 @@ -enyo.kind({name:"About",kind:"Scroller",style:"background-color:#303030",components:[{tag:"center",components:[{tag:"h1",style:"color:#f0f0f0",content:"r2wui"},{kind:"Image",src:"icon.png"},{tag:"h3",style:"color:#707070;margin-bottom:50px",content:"the web frontend for radare2"},{tag:"h2",style:"color:#a0a0a0",content:"author: pancake 2013"},{tag:"h2",style:"color:#a0a0a0",content:"version: 0.9.5git3",name:"version"}]}],create:function(){this.inherited(arguments);r2.cmd("?V",function(version){this.$.version.setContent("version: "+version)})}});enyo.kind({name:"Assembler",kind:"Scroller",classes:"r2panel",components:[{tag:"form",style:"margin-top:8px;margin-left:8px",attributes:{action:"javascript:#"},components:[{kind:"FittableRows",fit:true,components:[{kind:"onyx.InputDecorator",classes:"r2ui-input",components:[{tag:"font",content:"opcode",classes:"r2ui-input",style:"width:64px;font-weight:bold"},{kind:"Input",value:"",style:"width:60%",onkeydown:"assembleOpcode",attributes:{autocapitalize:"off"},name:"opcode"}]},{kind:"onyx.InputDecorator",classes:"r2ui-input",components:[{tag:"font",content:"bytes",classes:"r2ui-input",style:"width:64px;font-weight:bold"},{kind:"Input",value:"",style:"width:120px",onkeydown:"assembleOpcode",attributes:{autocapitalize:"off"},name:"bytes"}]},{kind:"onyx.InputDecorator",classes:"r2ui-input",components:[{tag:"font",content:"offset",classes:"r2ui-input",style:"width:64px;font-weight:bold"},{kind:"Input",value:"entry0",style:"width:120px",onkeydown:"assembleOpcode",attributes:{autocapitalize:"off"},name:"offset"}]}]}]},{tag:"form",style:"margin-top:8px;margin-left:8px",attributes:{action:"javascript:#"},components:[{tag:"h2",content:"Calculator"},{kind:"onyx.InputDecorator",classes:"r2ui-input",components:[{tag:"font",name:"value",content:"0",classes:"r2ui-input",style:"width:200px;font-weight:bold"},{kind:"Input",name:"ivalue",value:"0",style:"width:300",onkeydown:"calculateValue",attributes:{autocapitalize:"off"}}]}]}],calculateValue:function(inSender,inEvent){if(inEvent.keyCode===13){var v=this.$.value;var val=inSender.getValue();v.setContent("...");r2.cmd("?v "+val,function(x){v.setContent(x)})}},assembleOpcode:function(inSender,inEvent){if(inEvent.keyCode===13){var arg=inSender.getValue();var off=this.$.offset.getValue();switch(inSender.name){case"opcode":var hex=this.$.bytes;r2.assemble(off,arg,function(bytes){hex.setValue(bytes)});break;case"bytes":var op=this.$.opcode;r2.disassemble(off,arg,function(x){op.setValue(x)});break;case"offset":break}}}});var Config={keys:{1:"this.setIndex(0)",2:"this.setIndex(1)",3:"this.setIndex(2)",d:"r2ui.openpage(0)",a:"r2ui.openpage(1)",h:"r2ui.openpage(2)",g:"r2ui.openpage(3)",c:"r2ui.openpage(5)",s:"r2ui.openpage(8)",";":"r2.cmd('CC '+prompt('comment'));r2ui.seek('$$',true);"}};enyo.kind({name:"Console",kind:"Scroller",classes:"r2panel",style:"padding-left:7px",components:[{tag:"form",attributes:{action:"javascript:#"},components:[{kind:"FittableRows",fit:true,classes:"fittable-sample-shadow",components:[{kind:"onyx.InputDecorator",style:"margin-top:8px;background-color:#404040;width: 90%;display:inline-block",components:[{kind:"Input",style:"width:100%;color:white",value:"",onkeydown:"runCommand",attributes:{autocapitalize:"off"},name:"input"}]},{tag:"pre",classes:"r2ui-terminal",style:"width:90%;",fit:true,allowHtml:true,name:"output"}]}]}],runCommand:function(inSender,inEvent){if(inEvent.keyCode===13){var cmd=this.$.input.getValue();this.$.input.setValue("");(function(out){r2.cmd(cmd,function(x){out.setContent(x)})})(this.$.output)}}});function docss(x){return""+x+""}enyo.kind({name:"Disassembler",kind:"Scroller",tag:"div",style:"margin:0px;background-color:#c0c0c0",data:null,components:[{tag:"div",allowHtml:true,classes:"colorbar",name:"colorbar"},{tag:"br"},{tag:"div",content:"^",classes:"moreless",ontap:"less"},{tag:"pre",allowHtml:true,name:"text",content:"..",style:"margin-left:5px"},{tag:"div",content:"v",classes:"moreless",ontap:"more"}],min:0,max:0,block:512,base:"entry0",less:function(){var self=this;var text=this.$.text;this.min+=this.block;r2.get_disasm(this.base+"-"+this.min,this.block,function(x){x=docss(r2.filter_asm(x,"pd"));var oldy=r2ui._dis.getScrollBounds().height;text.setContent(x+text.getContent());var newy=r2ui._dis.getScrollBounds().height;r2ui._dis.scrollTo(0,newy-oldy)})},more:function(){var text=this.$.text;this.max+=this.block;r2.get_disasm(this.base+"+"+this.max,this.block,function(x){x=docss(r2.filter_asm(x,"pd"));text.setContent(text.getContent()+x)})},seek:function(addr){var text=this.$.text;this.base=addr;this.min=this.max=0;r2.get_disasm(addr,this.block,function(x){x=docss(r2.filter_asm(x,"pd"));text.setContent(x)});this.colorbar_create()},create:function(){this.inherited(arguments);var text=this.$.text;this.seek("entry0");r2ui._dis=this;r2ui.history_push("entry0");this.colorbar_create()},colorbar_create:function(){var self=this;r2.cmd("pvj 24",function(x){try{var y=JSON.parse(x)}catch(e){alert(e);return}console.log(y);var c=""+"";var colors={flags:"#c0c0c0",comments:"yellow",functions:"#5050f0",strings:"orange"};var off="";var WIDTH="100%";var HEIGHT=16;for(var i=0;i";var count=0;for(var k in colors)if(block[k])count++;count++;if(count==1)break;var h=HEIGHT/count;for(var k in colors){var color=colors[k];if(block[k])r+=""}r+="
____
";off="0x"+block.offset.toString(16)}else{off="0x"+(y.from+y.blocksize*i).toString(16)}c+=""+r+""}c+="";self.$.colorbar.setContent(c)})}});enyo.kind({name:"Graph",kind:"Scroller",style:"background-color:#c0c0c0",components:[{tag:"h2",content:"Open graph",style:"margin-left:10px;"},{kind:"Group",classes:"enyo-border-box group",defaultKind:"onyx.Button",components:[{content:"Basic blocks",classes:"onyx-dark menu-button",ontap:"openGraphBB"},{content:"Callgraph",classes:"onyx-dark menu-button",ontap:"openGraphCG"}]}],openGraphBB:function(){window.open("/graph/","_self")},openGraphCG:function(){window.open("/d3/","_self")}});function docss(x){return""+x+""}enyo.kind({name:"Hexdump",kind:"Scroller",tag:"div",style:"margin:0px;background-color:#c0c0c0;color:black",data:null,components:[{tag:"div",allowHtml:true,classes:"colorbar",name:"colorbar"},{tag:"div",content:"^",classes:"moreless",ontap:"less"},{tag:"pre",allowHtml:true,name:"text",content:"..",style:"margin-left:5px;color:black"},{tag:"div",content:"v",classes:"moreless",ontap:"more"}],min:0,max:0,block:1024,base:"entry0",less:function(){var self=this;var text=this.$.text;this.min+=this.block;r2.get_hexdump(this.base+"-"+this.min,this.block,function(x){x=css(r2.filter_asm(x,"px"));var oldy=r2ui._hex.getScrollBounds().height;text.setContent(x+text.getContent());var newy=r2ui._hex.getScrollBounds().height;r2ui._hex.scrollTo(0,newy-oldy)})},more:function(){var text=this.$.text;this.max+=this.block;r2.get_hexdump(this.base+"+"+this.max,this.block,function(x){x=docss(r2.filter_asm(x,"px"));text.setContent(text.getContent()+x)})},seek:function(addr){var text=this.$.text;this.base=addr;this.min=this.max=0;r2.get_hexdump(addr,this.block,function(x){x=docss(r2.filter_asm(x,"px"));text.setContent(x)});this.colorbar_create()},create:function(){this.inherited(arguments);var text=this.$.text;this.seek("entry0");r2ui._hex=this;r2ui.history_push("entry0");this.colorbar_create()},setupItem:function(inSender,inIndex){this.$.msg.setContent(this.data[inIndex.index]);return true},colorbar_create:function(){var self=this;r2.cmd("pvj",function(x){try{var y=JSON.parse(x)}catch(e){alert(e);return}console.log(y);var c="";var colors={flags:"#c0c0c0",comments:"yellow",functions:"#5050f0",strings:"orange"};var off="";var WIDTH=10;var HEIGHT=30;for(var i=0;i ";if(block.offset){var r="
";var count=0;for(var k in colors){if(block[k])count++}count++;if(count==1)break;var h=HEIGHT/count;for(var k in colors){var color=colors[k];if(block[k])r+=""}r+="
 
";off="0x"+block.offset.toString(16)}else{off="0x"+(y.from+y.blocksize*i).toString(16)}c+=""+r+""}c+="";self.$.colorbar.setContent(c)})}});enyo.kind({name:"LeftPanel",classes:"onyx-toolbar",kind:"Scroller",fit:true,style:"width: 220px;height:100%;margin:0px;",accelerated:true,horizontal:"hidden",create:function(){this.inherited(arguments);this.$.strategy.setTranslateOptimized=true},components:[{tag:"center",components:[{tag:"h3",ontap:"openPanel2",content:"radare2",style:"margin:0px;margin-bottom:20px;"},{kind:"Group",onActivate:"buttonActivated",classes:"enyo-border-box group",defaultKind:"onyx.Button",highlander:true,components:[{content:"Disassembler",classes:"onyx-dark menu-button",ontap:"openPanel",name:"Disassembler",active:true},{content:"Assembler",classes:"onyx-dark menu-button",ontap:"openPanel",name:"Assembler"},{content:"Hexdump",classes:"onyx-dark menu-button",ontap:"openPanel",name:"Hexdump"},{content:"Graph",classes:"onyx-dark menu-button",ontap:"openPanel",name:"Graph"},{content:"Search",classes:"onyx-dark menu-button",ontap:"openPanel",name:"Search"},{content:"Console",classes:"onyx-dark menu-button",ontap:"openPanel",name:"Console"},{content:"Logs",classes:"onyx-dark menu-button",ontap:"openPanel",name:"Logs"},{content:"Script",classes:"onyx-dark menu-button",ontap:"openPanel",name:"Script"},{content:"Settings",classes:"onyx-dark menu-button",ontap:"openPanel",name:"Settings"},{content:"About",classes:"onyx-dark menu-button",ontap:"openPanel",name:"About"}]}]}],openPanel2:function(){this.ra.setIndex(2)},openPanel:function(x){if(enyo.Panels.isScreenNarrow())this.ra.setIndex(1);if(x.name==this.oname)this.ra.setIndex(1);this.oname=x.name;if(this.openCallback)this.openCallback(x.name)},oname:null,ra:null,oldSender:null,rowTap:function(inSender,inIndex){if(this.oldSender)this.oldSender.setStyle("width:100%");inSender.setStyle("background-color: #202020;width:100%");this.oldSender=inSender;if(this.openCallback)this.openCallback(inIndex.index)},openCallback:undefined,data:[],iter:1,refresh:function(){this.iter++}});enyo.kind({name:"Logs",kind:"Scroller",style:"background-color:#c0c0c0;padding-left:8px",components:[{tag:"form",attributes:{action:"javascript:#"},components:[{kind:"FittableRows",fit:true,classes:"fittable-sample-shadow",components:[{kind:"onyx.InputDecorator",style:"margin-top:8px;background-color:#404040;width: 90%;display:inline-block",components:[{kind:"Input",style:"width:100%;color:white",value:"",onkeydown:"sendMessage",attributes:{autocapitalize:"off"},name:"input"}]},{tag:"pre",classes:"r2ui-terminal",style:"width:90%;",fit:true,allowHtml:true,name:"output"}]}]}],logger:null,create:function(){this.inherited(arguments);var out=this.$.output;this.logger=r2.get_logger().on("message",function(msg){out.setContent(out.getContent()+msg.text+"\n")});this.logger.autorefresh(3)},sendMessage:function(inSender,inEvent){if(inEvent.keyCode===13){var msg=this.$.input.getValue();this.$.input.setValue("");this.logger.send(msg)}}});enyo.kind({name:"RadareApp",kind:"Panels",classes:"panels enyo-unselectable",realtimeFit:true,arrangerKind:"CollapsingArranger",components:[{name:"lp",kind:"LeftPanel"},{name:"mp",kind:"MainPanel"},{name:"rp",kind:"RightPanel"},{kind:enyo.Signals,onkeypress:"handleKeyPress"}],setPanel0:function(){this.$.RadareApp.setIndex(1)},create:function(){this.inherited(arguments);var data=[{name:"Disassembler",active:true},{name:"Assembler"},{name:"Hexdump"},{name:"Search"},{name:"Console"},{name:"Logs"},{name:"Script"},{name:"Settings",separator:true},{name:"About"}];this.$.lp.data=data;this.$.mp.data=data;r2ui.ra=this.$.mp.ra=this.$.lp.ra=this.$.rp.ra=this;var mp=this.$.mp;r2ui.mp=mp;this.$.lp.openCallback=function(idx){mp.openPage(idx)};this.$.lp.refresh()},handleKeyPress:function(inSender,inEvent){for(var key in Config.keys){if(key.substring(0,2)=="C-"){if(inEvent.ctrlKey){var k=key.substring(2).charCodeAt(0);if(inEvent.charCode==k){var cmd=Config.keys[key];eval(cmd+";")}}}else{var k=key.charCodeAt(0);if(inEvent.charCode==k){var cmd=Config.keys[key];eval(cmd+";")}}}}});window.onload=function(){var obj=(new RadareApp).renderInto(document.body)};enyo.kind({name:"MainPanel",classes:"onyx",kind:"FittableRows",classes:"enyo-fit",style:"margin:0px;padding:0px;border:0px",data:null,buttonClicked:function(x){alert("let's play!")},cancelClicked:function(x){alert("nothing to see here! move along.")},inputKey:function(inSender,inEvent){if(inEvent.keyCode===13){var off=this.$.input.getValue();r2ui.opendis(off)}},goRename:function(){var msg=prompt("New name?","");if(msg)r2.cmd("afr "+msg,function(){r2ui.seek("$$",true)})},goComment:function(){var msg=prompt("Comment?","");if(msg)r2.cmd("CC "+msg,function(){r2ui.seek("$$",true)})},goFlag:function(){var msg=prompt("Flag name?","");if(msg)r2.cmd("f "+msg,function(){r2ui.seek("$$",true)})},goUnflag:function(){r2.cmd("f-$$",function(){r2ui.seek("$$",true)})},goAnalyze:function(){r2.cmd("af",function(){r2ui.seek("$$",true)})},goCopy:function(){var msg=prompt("How many bytes?","");if(msg)r2.cmd("y "+msg,function(){r2ui.seek("$$",true)})},goPaste:function(){r2.cmd("yy",function(){r2ui.seek("$$",true)})},wrString:function(){var msg=prompt("Text","");if(msg)r2.cmd("w "+msg,function(){r2ui.seek("$$",true)})},wrOpcode:function(){var msg=prompt("Opcode","");if(msg)r2.cmd("wa "+msg,function(){r2ui.seek("$$",true)})},wrFile:function(){var msg=prompt("Filename","");if(msg)r2.cmd("wf "+msg,function(){r2ui.seek("$$",true)})},wrHex:function(){var msg=prompt("Hexpair","");if(msg)r2.cmd("wx "+msg,function(){r2ui.seek("$$",true)})},coCode:function(){var msg=prompt("How many bytes?","");if(msg)r2.cmd("y "+msg,function(){r2ui.seek("$$",true)})},coString:function(){r2.cmd("Cz",function(){r2ui.seek("$$",true)})},coData:function(){var msg=prompt("How many bytes?","");if(msg)r2.cmd("Cd "+msg,function(){r2ui.seek("$$",true)})},setTitle:function(title){if(title){this.$.title.setContent(title);this.$.title.setStyle("visibility:visible;top:8px");this.$.extra.setStyle("visibility:hidden;")}else{this.$.title.setStyle("visibility:hidden");this.$.extra.setStyle("visibility:visible;")}},components:[{kind:"onyx.Toolbar",components:[{kind:"onyx.Button",content:"[",ontap:"openSidebar",classes:"top"},{kind:"onyx.Button",content:"]",ontap:"openSidebar2",classes:"top"},{name:"title",tag:"h2",content:"Assembler",classes:"topbox",style:"visibility:hidden;"},{name:"extra",tag:"div",classes:"topbox",components:[{kind:"onyx.PickerDecorator",classes:"top",components:[{kind:"onyx.Button",content:"Actions"},{kind:"onyx.Picker",components:[{content:"Analyze",ontap:"goAnalyze"},{content:"Rename",ontap:"goRename"},{content:"Comment",ontap:"goComment"},{content:"Flag",ontap:"goFlag"},{content:"Unflag",ontap:"goUnflag"},{content:"Copy",ontap:"goCopy"},{content:"Paste",ontap:"goPaste"}]}]},{kind:"onyx.Button",content:"<",ontap:"prevSeek",classes:"top",style:"top:10px"},{kind:"onyx.Button",content:">",ontap:"nextSeek",classes:"top",style:"top:10px"},{kind:"onyx.InputDecorator",style:"width: 200px;top:10px",classes:"top",components:[{kind:"onyx.Input",name:"input",value:"entry0",onchange:"gotoSeek",onkeydown:"inputKey"}]},{kind:"onyx.PickerDecorator",classes:"top",components:[{kind:"onyx.Button",content:"Convert"},{kind:"onyx.Picker",components:[{content:"Data",ontap:"coData"},{content:"Code",ontap:"coCode"},{content:"String",ontap:"coString"}]}]},{kind:"onyx.PickerDecorator",classes:"top",components:[{kind:"onyx.Button",content:"Write"},{kind:"onyx.Picker",components:[{content:"File",ontap:"wrFile"},{content:"Hexpair",ontap:"wrHex"},{content:"String",ontap:"wrString"},{content:"Opcode",ontap:"wrOpcode"}]}]}]}]},{kind:"Panels",name:"panels",fit:true,draggable:false,realtimeFit:true,components:[{kind:"Disassembler",name:"pageDisassembler"},{kind:"Assembler",name:"pageAssembler"},{kind:"Hexdump",name:"pageHexdump"},{kind:"Graph",name:"pageGraph"},{kind:"Search",name:"pageSearch"},{kind:"Console",name:"pageConsole"},{kind:"Logs",name:"pageLogs"},{kind:"Script",name:"pageScript"},{kind:"Settings",name:"pageSettings"},{kind:"About",name:"pageAbout"}]}],create:function(){this.inherited(arguments);r2ui.panels=this.$.panels;this.$.panels.setIndex(0)},ra:null,openSidebar:function(){this.ra.setIndex(this.ra.index?0:1)},openSidebar2:function(){this.ra.setIndex(2)},rendered:function(){this.inherited(arguments)},openPage:function(idx){var str,sp=this.$.panels;var r=-1;switch(idx){case"Disassembler":r=0;break;case"Assembler":r=1;break;case"Hexdump":r=2;break;case"Graph":r=3;break;case"Search":r=4;break;case"Console":r=5;break;case"Logs":r=6;break;case"Script":r=7;break;case"Settings":r=8;break;case"About":r=9;break}if(r==-1){sp.setIndex(idx);return}eval("var x = this.$.page"+idx);switch(r){case 0:case 2:this.setTitle();break;default:this.setTitle(idx);break}sp.setIndex(r)},seekStack:[],nextSeek:function(){var addr=r2ui.history_next();if(!addr)return;r2ui.seek(addr,true)},prevSeek:function(){var addr=r2ui.history_prev();if(!addr)return;r2ui.seek(addr,true)},gotoSeek:function(){var addr=this.$.input.getValue();if(addr[0]=="!"){r2.cmd(addr.slice(1),function(x){alert(x)})}else{this.seekStack.push()}}});var r2={};var backward=false;var next_curoff=0;var next_lastoff=0;var prev_curoff=0;var prev_lastoff=0;r2.root="";function dump(obj){var x="";for(var a in obj)x+=a+"\n";alert(x)}function objtostr(obj){var str="";for(var a in obj)str+=a+": "+obj[a]+",\n";return str}function Ajax(method,uri,body,fn){var x=new XMLHttpRequest;x.open(method,uri,false);x.setRequestHeader("Accept","text/plain");x.setRequestHeader("Accept","text/html");x.setRequestHeader("Content-Type","application/x-ww-form-urlencoded; charset=UTF-8");x.onreadystatechange=function(y){if(x.status==200){if(fn)fn(x.responseText)}else console.error("ajax "+x.status)};x.send(body)}r2.assemble=function(offset,opcode,fn){var off=offset?"@"+offset:"";r2.cmd('"pa '+opcode+'"'+off,fn)};r2.disassemble=function(offset,bytes,fn){var off=offset?"@"+offset:"";var str="pi @b:"+bytes+off;r2.cmd(str,fn)};r2.get_hexdump=function(offset,length,cb){r2.cmd("px "+length+"@"+offset,cb)};r2.get_disasm=function(offset,length,cb){r2.cmd("pD "+length+"@"+offset,cb)};r2.config_set=function(fn){};r2.config_get=function(fn){};r2.set_flag_space=function(ns,fn){r2.cmd("fs "+ns,fn)};r2.set_flag_space=function(ns,fn){r2.cmd("fs "+ns,fn)};r2.get_flags=function(fn){r2.cmd("fj",function(x){fn(x?JSON.parse(x):[])})};r2.get_opcodes=function(off,n,cb){r2.cmd("pdj @"+off+"!"+n,function(json){cb(JSON.parse(json))})};r2.get_bytes=function(off,n,cb){r2.cmd("pcj @"+off+"!"+n,function(json){cb(JSON.parse(json))})};r2.get_info=function(cb){r2.cmd("ij",function(json){cb(JSON.parse(json))})};r2.bin_imports=function(cb){r2.cmd("iij",function(json){cb(JSON.parse(json))})};r2.bin_symbols=function(cb){r2.cmd("isj",function(json){cb(JSON.parse(json))})};r2.bin_sections=function(cb){r2.cmd("iSj",function(json){cb(JSON.parse(json))})};r2.cmds=function(cmds,cb){if(cmds.length==0)return;var cmd=cmds[0];cmds=cmds.splice(1);function lala(){if(cmd==undefined||cmds.length==0){return}cmd=cmds[0];cmds=cmds.splice(1);r2.cmd(cmd,lala);if(cb)cb();return}r2.cmd(cmd,lala)};r2.cmd=function(c,cb){Ajax("GET",r2.root+"/cmd/"+encodeURI(c),"",function(x){if(cb)cb(x)})};r2.alive=function(cb){r2.cmd("b",function(o){var ret=false;if(o&&o.length()>0)ret=true;if(cb)cb(o)})};r2.get_logger=function(obj){if(typeof obj!="object")obj={};obj.last=0;obj.events={};obj.interval=null;r2.cmd("ll",function(x){obj.last=+x});obj.load=function(cb){r2.cmd("lj "+(obj.last+1),function(ret){if(cb)cb(JSON.parse(ret))})};obj.clear=function(cb){r2.cmd("l-",cb)};obj.send=function(msg,cb){r2.cmd("l "+msg,cb)};obj.refresh=function(cb){obj.load(function(ret){for(var i=0;iobj.last)obj.last=message[0]}if(cb)cb()})};obj.autorefresh=function(n){if(!n){if(obj.interval)obj.interval.stop();return}function to(){obj.refresh(function(){});setTimeout(to,n*1e3);return true}obj.interval=setTimeout(to,n*1e3)};obj.on=function(ev,cb){obj.events[ev]=cb;return obj};return obj};r2.filter_asm=function(x,display){var curoff=backward?prev_curoff:next_curoff;var lastoff=backward?prev_lastoff:next_lastoff;var lines=x.split(/\n/g);r2.cmd("s",function(x){curoff=x});for(var i=lines.length-1;i>0;i--){var a=lines[i].match(/0x([a-fA-F0-9]+)/);if(a&&a.length>0){lastoff=a[0].replace(/:/g,"");break}}if(display=="afl"){var z="";for(var i=0;i"+space+"\n"}x=z}else{}}else if(display[0]=="i"){if(display[1]){var z="";for(var i=0;ifunction:");x=x.replace(/;(\s+)/g,";");x=x.replace(/;(.*)/g,"// $1");x=x.replace(/(bl|goto|call)/g,"call");x=x.replace(/(jmp|bne|beq|js|jnz|jae|jge|jbe|jg|je|jl|jz|jb|ja|jne)/g,"$1");x=x.replace(/(dword|qword|word|byte|movzx|movsxd|cmovz|mov\ |lea\ )/g,"$1");x=x.replace(/(hlt|leave|iretd|retn|ret)/g,"$1");x=x.replace(/(add|sbb|sub|mul|div|shl|shr|and|not|xor|inc|dec|sar|sal)/g,"$1");x=x.replace(/(push|pop)/g,"$1");x=x.replace(/(test|cmp)/g,"$1");x=x.replace(/(outsd|out|string|invalid|int |int3|trap|main|in)/g,"$1");x=x.replace(/nop/g,"nop");x=x.replace(/(sym|fcn|str|imp|loc).([^:<(\\\/ \|)\->]+)/g,"$1.$2")}x=x.replace(/0x([a-zA-Z0-9]+)/g,"0x$1");if(backward){prev_curoff=curoff;prev_lastoff=lastoff}else{next_curoff=curoff;next_lastoff=lastoff;if(!prev_curoff)prev_curoff=next_curoff}return x};var r2ui={};r2ui.history=[];r2ui.history_idx=0;r2ui.history_push=function(x){if(r2ui.history_idx!=r2ui.history.length)r2ui.history=r2ui.history.splice(0,r2ui.history_idx);r2ui.history_idx++;r2ui.history.push(x)};r2ui.history_pop=function(){if(r2ui.history_idx==r2ui.history.length)r2ui.history_idx--;return r2ui.history.pop()};r2ui.history_prev=function(){if(r2ui.history_idx>1)r2ui.history_idx--;var ret=r2ui.history[r2ui.history_idx-1];return ret};r2ui.history_next=function(){var ret=r2ui.history[r2ui.history_idx];if(r2ui.history_idx0x"+x[i].offset.toString(16)+" "+x[i].name+"\n";return z}enyo.kind({name:"RightPanel",style:"background-color:#404040;",classes:"onyx-toolbar",kind:"FittableRows",ra:null,components:[{kind:"FittableColumns",style:"margin-bottom:5px",components:[{kind:"onyx.Button",content:"[",ontap:"closeSidebar",style:"padding:8px;margin-right:8px"},{onup:"toggleScroll",style:"position:absolute;left:40px;top:0px;",kind:"onyx.MenuDecorator",onSelect:"itemSelected",components:[{content:"List elements"},{kind:"onyx.Menu",showOnTop:true,maxHeight:290,name:"menu",style:"height:300px",components:[{content:"flags",value:"2"},{content:"flagspaces",value:"2"},{classes:"onyx-menu-divider"},{content:"strings",value:"1"},{content:"symbols",value:"1"},{content:"imports",value:"1"},{content:"functions",value:"1"},{content:"comments",value:"1"},{classes:"onyx-menu-divider"},{content:"registers",value:"1"},{content:"stack",value:"2"},{content:"backtrace",value:"3"}]}]}]},{kind:"Scroller",animated:false,fit:true,horizontal:false,name:"scroll",components:[{tag:"pre",style:"font-size:14px",allowHtml:true,name:"output",content:".."}]}],toggleScroll:function(){var is_visible=this.$.menu.getShowing();this.$.scroll.setShowing(is_visible)},rowTap:function(){},create:function(){this.inherited(arguments)},data:[],setupItem:function(inSender,inIndex){var item=this.data[inIndex.index];if(!item)return false;var msg=item.name+" "+item.offset;console.log(msg);this.$.msg.setContent(msg);return true},refresh:function(){},itemSelected:function(inSender,inEvent){var self=this;var selected=inEvent.originator.content;var is_visible=this.$.menu.getShowing();r2ui.rp=self;this.$.scroll.setShowing(!!!is_visible);this.$.menu.setShowing(false);this.$.scroll.scrollToTop();switch(selected){case"comments":r2.cmd("CC*",function(x){x=x.replace(/0x([a-zA-Z0-9]*)/g,"0x$1");self.$.output.setContent(x)});break;case"functions":r2.cmd("afl",function(x){x=x.replace(/0x([a-zA-Z0-9]*)/g,"0x$1");self.$.output.setContent(x)});break;case"flagspaces":this.updateFlagspace();break;case"strings":r2.cmd("izj",function(x){var s=JSON.parse(x);var h="";for(var i in s){var off=(+s[i]["offset"]).toString(16);h+='0x'+off+" "+s[i]["string"]+"
"}self.$.output.setContent(h)});break;case"sections":r2.bin_sections(function(x){self.$.output.setContent(makelist(x))});break;case"symbols":r2.bin_symbols(function(x){self.$.output.setContent(makelist(x))});break;case"imports":r2.bin_imports(function(x){self.$.output.setContent(makelist(x))});break;case"flags":r2.get_flags(function(flags){self.data=flags;self.$.output.setContent(makelist(flags));self.refresh()});break}},closeSidebar:function(){this.ra.setIndex(1)},selectFlagspace:function(x){r2.cmd("fs "+x,function(x){r2ui.rp.updateFlagspace()})},updateFlagspace:function(){var self=r2ui.rp;r2.cmd("fsj",function(x){var s=JSON.parse(x);var h="";for(var i in s){var nam=s[i].name;var sel=s[i].selected;h+='"+nam+" "+(sel?" (selected)":"")+"
"}self.$.output.setContent(h)})}});enyo.kind({name:"Script",kind:"Scroller",style:"background-color:#c0c0c0",clear:function(){with(this.$.input){setContent(value="");render()}},demo:function(){with(this.$.input){setContent(value=['r2.disassemble (0, "9090", function(text) {'," show (text)"," show ()",' r2.assemble (0, "mov eax, 33", function (text) {'," show (text);"," });"," show (r2)","});"].join("\n"));render()}},run:function(){var code=this.$.input.value;var out="";function show(x){if(!x)out+="\n";else if(typeof x=="object"){out+="{";for(var y in x){var v=x[y];out+=y+": "+v+"\n , "}out+="}"}else{out+=x+"\n"}}try{eval(code);this.$.output.setContent(out)}catch(e){alert(e)}},components:[{tag:"p",style:"margin-left:10px",components:[{kind:"onyx.Button",content:"Run",classes:"sourcebutton",ontap:"run"},{kind:"onyx.Button",content:"Clear",classes:"sourcebutton",ontap:"clear"},{kind:"onyx.Button",content:"Demo",classes:"sourcebutton",ontap:"demo"}]},{kind:"onyx.TextArea",name:"input",classes:"sourcecode"},{tag:"pre",name:"output",style:"margin-left:12px"}]});enyo.kind({name:"Search",kind:"Scroller",style:"background-color:#303030",components:[{tag:"center",components:[{tag:"h1",style:"color:#f0f0f0",content:"TODO: Search"}]}]});enyo.kind({name:"Settings",classes:"panels-sample-sliding-content r2panel",kind:"Scroller",tag:"div",style:"color:black !important;padding:0px;margin:0px;border:0px;overflow:hidden",components:[{kind:"FittableRows",fit:false,components:[{tag:"h2",content:"General"},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Two panels",classes:"rowline"},{kind:"onyx.ToggleButton",name:"twopanels"}]},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Edit keybindings",classes:"rowline"},{kind:"onyx.Button",content:"+"}]}]},{kind:"FittableRows",fit:false,components:[{tag:"h2",content:"Target"},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Arch",classes:"rowline"},{kind:"onyx.PickerDecorator",components:[{},{kind:"onyx.Picker",name:"arch",components:[{content:"arc"},{content:"arm"},{content:"avr"},{content:"ppc"},{content:"bf"},{content:"dalvik"},{content:"dcpu16"},{content:"i8080"},{content:"java"},{content:"m68k"},{content:"mips"},{content:"msil"},{content:"rar"},{content:"sh"},{content:"sparc"},{content:"x86",active:true},{content:"z80"}]}]}]},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Bits",classes:"rowline"},{kind:"onyx.PickerDecorator",components:[{},{kind:"onyx.Picker",name:"bits",components:[{content:"8"},{content:"16"},{content:"32",active:true},{content:"64"}]}]}]},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Endian",classes:"rowline"},{kind:"onyx.PickerDecorator",components:[{},{kind:"onyx.Picker",components:[{content:"little",active:true},{content:"big"}]}]}]},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"OS",classes:"rowline"},{kind:"onyx.PickerDecorator",components:[{},{kind:"onyx.Picker",components:[{content:"linux",active:true},{content:"darwin"},{content:"w32"},{content:"dos"}]}]}]},{tag:"h2",content:"Disassembly"},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Show bytes",classes:"rowline",ontap:"nextPanel"},{kind:"onyx.ToggleButton",name:"toggle_bytes"}]},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Show offsets",classes:"rowline",ontap:"nextPanel"},{kind:"onyx.ToggleButton",name:"toggle_offset"}]},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Show lines",classes:"rowline",ontap:"nextPanel"},{kind:"onyx.ToggleButton",name:"toggle_lines"}]},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Pseudo",classes:"rowline",ontap:"nextPanel"},{kind:"onyx.ToggleButton",name:"toggle_pseudo"}]}]},{tag:"h2",content:"Save changes?"},{tag:"div",style:"margin-left:50px",components:[{ontap:"reset",kind:"onyx.Button",style:"position:relative;left:0px",content:"Reset"},{ontap:"save",kind:"onyx.Button",style:"position:relative;left:50px",content:"Save",classes:"onyx-affirmative"}]},{tag:"div",style:"height:64px"}],load:function(){var self=this; +enyo.kind({name:"About",kind:"Scroller",style:"background-color:#303030",components:[{tag:"center",components:[{tag:"h1",style:"color:#f0f0f0",content:"r2wui"},{kind:"Image",src:"icon.png"},{tag:"h3",style:"color:#707070;margin-bottom:50px",content:"the web frontend for radare2"},{tag:"h2",style:"color:#a0a0a0",content:"author: pancake 2013"},{tag:"h2",style:"color:#a0a0a0",content:"version: 0.9.5git3",name:"version"}]}],create:function(){this.inherited(arguments);r2.cmd("?V",function(version){this.$.version.setContent("version: "+version)})}});enyo.kind({name:"Assembler",kind:"Scroller",classes:"r2panel",components:[{tag:"form",style:"margin-top:8px;margin-left:8px",attributes:{action:"javascript:#"},components:[{kind:"FittableRows",fit:true,components:[{kind:"onyx.InputDecorator",classes:"r2ui-input",components:[{tag:"font",content:"opcode",classes:"r2ui-input",style:"width:64px;font-weight:bold"},{kind:"Input",value:"",style:"width:60%",onkeydown:"assembleOpcode",attributes:{autocapitalize:"off"},name:"opcode"}]},{kind:"onyx.InputDecorator",classes:"r2ui-input",components:[{tag:"font",content:"bytes",classes:"r2ui-input",style:"width:64px;font-weight:bold"},{kind:"Input",value:"",style:"width:120px",onkeydown:"assembleOpcode",attributes:{autocapitalize:"off"},name:"bytes"}]},{kind:"onyx.InputDecorator",classes:"r2ui-input",components:[{tag:"font",content:"offset",classes:"r2ui-input",style:"width:64px;font-weight:bold"},{kind:"Input",value:"entry0",style:"width:120px",onkeydown:"assembleOpcode",attributes:{autocapitalize:"off"},name:"offset"}]}]}]},{tag:"form",style:"margin-top:8px;margin-left:8px",attributes:{action:"javascript:#"},components:[{tag:"h2",content:"Calculator"},{kind:"onyx.InputDecorator",classes:"r2ui-input",components:[{tag:"font",name:"value",content:"0",classes:"r2ui-input",style:"width:200px;font-weight:bold"},{kind:"Input",name:"ivalue",value:"0",style:"width:300",onkeydown:"calculateValue",attributes:{autocapitalize:"off"}}]}]}],calculateValue:function(inSender,inEvent){if(inEvent.keyCode===13){var v=this.$.value;var val=inSender.getValue();v.setContent("...");r2.cmd("?v "+val,function(x){v.setContent(x)})}},assembleOpcode:function(inSender,inEvent){if(inEvent.keyCode===13){var arg=inSender.getValue();var off=this.$.offset.getValue();switch(inSender.name){case"opcode":var hex=this.$.bytes;r2.assemble(off,arg,function(bytes){hex.setValue(bytes)});break;case"bytes":var op=this.$.opcode;r2.disassemble(off,arg,function(x){op.setValue(x)});break;case"offset":break}}}});var Config={keys:{1:"this.setIndex(0)",2:"this.setIndex(1)",3:"this.setIndex(2)",d:"r2ui.openpage(0)",a:"r2ui.openpage(1)",h:"r2ui.openpage(2)",g:"r2ui.openpage(3)",c:"r2ui.openpage(5)",s:"r2ui.openpage(8)",";":"r2.cmd('CC '+prompt('comment'));r2ui.seek('$$',true);"}};enyo.kind({name:"Console",kind:"Scroller",classes:"r2panel",style:"padding-left:7px",components:[{tag:"form",attributes:{action:"javascript:#"},components:[{kind:"FittableRows",fit:true,classes:"fittable-sample-shadow",components:[{kind:"onyx.InputDecorator",style:"margin-top:8px;background-color:#404040;width: 90%;display:inline-block",components:[{kind:"Input",style:"width:100%;color:white",value:"",onkeydown:"runCommand",attributes:{autocapitalize:"off"},name:"input"}]},{tag:"pre",classes:"r2ui-terminal",style:"width:90%;",fit:true,allowHtml:true,name:"output"}]}]}],runCommand:function(inSender,inEvent){if(inEvent.keyCode===13){var cmd=this.$.input.getValue();this.$.input.setValue("");(function(out){r2.cmd(cmd,function(x){out.setContent(x)})})(this.$.output)}}});function docss(x){return""+x+""}enyo.kind({name:"Disassembler",kind:"Scroller",tag:"div",style:"margin:0px;background-color:#c0c0c0",data:null,components:[{tag:"div",allowHtml:true,classes:"colorbar",name:"colorbar"},{tag:"br"},{tag:"div",content:"^",classes:"moreless",ontap:"less"},{tag:"pre",allowHtml:true,name:"text",content:"..",style:"margin-left:5px"},{tag:"div",content:"v",classes:"moreless",ontap:"more"}],min:0,max:0,block:512,base:"entry0",less:function(){var self=this;var text=this.$.text;this.min+=this.block;r2.get_disasm(this.base+"-"+this.min,this.block,function(x){x=docss(r2.filter_asm(x,"pd"));var oldy=r2ui._dis.getScrollBounds().height;text.setContent(x+text.getContent());var newy=r2ui._dis.getScrollBounds().height;r2ui._dis.scrollTo(0,newy-oldy)})},more:function(){var text=this.$.text;this.max+=this.block;r2.get_disasm(this.base+"+"+this.max,this.block,function(x){x=docss(r2.filter_asm(x,"pd"));text.setContent(text.getContent()+x)})},seek:function(addr){var text=this.$.text;this.base=addr;this.min=this.max=0;r2.get_disasm(addr,this.block,function(x){x=docss(r2.filter_asm(x,"pd"));text.setContent(x)});this.colorbar_create()},create:function(){this.inherited(arguments);var text=this.$.text;this.seek("entry0");r2ui._dis=this;r2ui.history_push("entry0");this.colorbar_create()},colorbar_create:function(){var self=this;r2.cmd("pvj 24",function(x){try{var y=JSON.parse(x)}catch(e){alert(e);return}console.log(y);var c=""+"";var colors={flags:"#c0c0c0",comments:"yellow",functions:"#5050f0",strings:"orange"};var off="";var WIDTH="100%";var HEIGHT=16;for(var i=0;i";var count=0;for(var k in colors)if(block[k])count++;count++;if(count==1)break;var h=HEIGHT/count;for(var k in colors){var color=colors[k];if(block[k])r+=""}r+="
____
";off="0x"+block.offset.toString(16)}else{off="0x"+(y.from+y.blocksize*i).toString(16)}c+=""+r+""}c+="";self.$.colorbar.setContent(c)})}});enyo.kind({name:"Graph",kind:"Scroller",style:"background-color:#c0c0c0",components:[{tag:"h2",content:"Open graph",style:"margin-left:10px;"},{kind:"Group",classes:"enyo-border-box group",defaultKind:"onyx.Button",components:[{content:"Basic blocks",classes:"onyx-dark menu-button",ontap:"openGraphBB"},{content:"Callgraph",classes:"onyx-dark menu-button",ontap:"openGraphCG"}]}],openGraphBB:function(){window.open("/graph/","_self")},openGraphCG:function(){window.open("/d3/","_self")}});function docss(x){return""+x+""}enyo.kind({name:"Hexdump",kind:"Scroller",tag:"div",style:"margin:0px;background-color:#c0c0c0;color:black",data:null,components:[{tag:"div",allowHtml:true,classes:"colorbar",name:"colorbar"},{tag:"div",content:"^",classes:"moreless",ontap:"less"},{tag:"pre",allowHtml:true,name:"text",content:"..",style:"margin-left:5px;color:black"},{tag:"div",content:"v",classes:"moreless",ontap:"more"}],min:0,max:0,block:1024,base:"entry0",less:function(){var self=this;var text=this.$.text;this.min+=this.block;r2.get_hexdump(this.base+"-"+this.min,this.block,function(x){x=css(r2.filter_asm(x,"px"));var oldy=r2ui._hex.getScrollBounds().height;text.setContent(x+text.getContent());var newy=r2ui._hex.getScrollBounds().height;r2ui._hex.scrollTo(0,newy-oldy)})},more:function(){var text=this.$.text;this.max+=this.block;r2.get_hexdump(this.base+"+"+this.max,this.block,function(x){x=docss(r2.filter_asm(x,"px"));text.setContent(text.getContent()+x)})},seek:function(addr){var text=this.$.text;this.base=addr;this.min=this.max=0;r2.get_hexdump(addr,this.block,function(x){x=docss(r2.filter_asm(x,"px"));text.setContent(x)});this.colorbar_create()},create:function(){this.inherited(arguments);var text=this.$.text;this.seek("entry0");r2ui._hex=this;r2ui.history_push("entry0");this.colorbar_create()},setupItem:function(inSender,inIndex){this.$.msg.setContent(this.data[inIndex.index]);return true},colorbar_create:function(){var self=this;r2.cmd("pvj",function(x){try{var y=JSON.parse(x)}catch(e){alert(e);return}console.log(y);var c="";var colors={flags:"#c0c0c0",comments:"yellow",functions:"#5050f0",strings:"orange"};var off="";var WIDTH=10;var HEIGHT=30;for(var i=0;i ";if(block.offset){var r="
";var count=0;for(var k in colors){if(block[k])count++}count++;if(count==1)break;var h=HEIGHT/count;for(var k in colors){var color=colors[k];if(block[k])r+=""}r+="
 
";off="0x"+block.offset.toString(16)}else{off="0x"+(y.from+y.blocksize*i).toString(16)}c+=""+r+""}c+="";self.$.colorbar.setContent(c)})}});enyo.kind({name:"LeftPanel",classes:"onyx-toolbar",kind:"Scroller",fit:true,style:"width: 220px;height:100%;margin:0px;",accelerated:true,horizontal:"hidden",create:function(){this.inherited(arguments);this.$.strategy.setTranslateOptimized=true},components:[{tag:"center",components:[{tag:"h3",ontap:"openPanel2",content:"radare2",style:"margin:0px;margin-bottom:20px;"},{kind:"Group",onActivate:"buttonActivated",classes:"enyo-border-box group",defaultKind:"onyx.Button",highlander:true,components:[{content:"Disassembler",classes:"onyx-dark menu-button",ontap:"openPanel",name:"Disassembler",active:true},{content:"Assembler",classes:"onyx-dark menu-button",ontap:"openPanel",name:"Assembler"},{content:"Hexdump",classes:"onyx-dark menu-button",ontap:"openPanel",name:"Hexdump"},{content:"Graph",classes:"onyx-dark menu-button",ontap:"openPanel",name:"Graph"},{content:"Search",classes:"onyx-dark menu-button",ontap:"openPanel",name:"Search"},{content:"Console",classes:"onyx-dark menu-button",ontap:"openPanel",name:"Console"},{content:"Logs",classes:"onyx-dark menu-button",ontap:"openPanel",name:"Logs"},{content:"Script",classes:"onyx-dark menu-button",ontap:"openPanel",name:"Script"},{content:"Settings",classes:"onyx-dark menu-button",ontap:"openPanel",name:"Settings"},{content:"About",classes:"onyx-dark menu-button",ontap:"openPanel",name:"About"}]}]}],openPanel2:function(){this.ra.setIndex(2)},openPanel:function(x){if(enyo.Panels.isScreenNarrow())this.ra.setIndex(1);if(x.name==this.oname)this.ra.setIndex(1);this.oname=x.name;if(this.openCallback)this.openCallback(x.name)},oname:null,ra:null,oldSender:null,rowTap:function(inSender,inIndex){if(this.oldSender)this.oldSender.setStyle("width:100%");inSender.setStyle("background-color: #202020;width:100%");this.oldSender=inSender;if(this.openCallback)this.openCallback(inIndex.index)},openCallback:undefined,data:[],iter:1,refresh:function(){this.iter++}});enyo.kind({name:"Logs",kind:"Scroller",style:"background-color:#c0c0c0;padding-left:8px",components:[{tag:"form",attributes:{action:"javascript:#"},components:[{kind:"FittableRows",fit:true,classes:"fittable-sample-shadow",components:[{kind:"onyx.InputDecorator",style:"margin-top:8px;background-color:#404040;width: 90%;display:inline-block",components:[{kind:"Input",style:"width:100%;color:white",value:"",onkeydown:"sendMessage",attributes:{autocapitalize:"off"},name:"input"}]},{tag:"pre",classes:"r2ui-terminal",style:"width:90%;",fit:true,allowHtml:true,name:"output"}]}]}],logger:null,create:function(){this.inherited(arguments);var out=this.$.output;this.logger=r2.get_logger().on("message",function(msg){out.setContent(out.getContent()+msg.text+"\n")});this.logger.autorefresh(3)},sendMessage:function(inSender,inEvent){if(inEvent.keyCode===13){var msg=this.$.input.getValue();this.$.input.setValue("");this.logger.send(msg)}}});enyo.kind({name:"RadareApp",kind:"Panels",classes:"panels enyo-unselectable",realtimeFit:true,arrangerKind:"CollapsingArranger",components:[{name:"lp",kind:"LeftPanel"},{name:"mp",kind:"MainPanel"},{name:"rp",kind:"RightPanel"},{kind:enyo.Signals,onkeypress:"handleKeyPress"}],setPanel0:function(){this.$.RadareApp.setIndex(1)},create:function(){this.inherited(arguments);var data=[{name:"Disassembler",active:true},{name:"Assembler"},{name:"Hexdump"},{name:"Search"},{name:"Console"},{name:"Logs"},{name:"Script"},{name:"Settings",separator:true},{name:"About"}];this.$.lp.data=data;this.$.mp.data=data;r2ui.ra=this.$.mp.ra=this.$.lp.ra=this.$.rp.ra=this;var mp=this.$.mp;r2ui.mp=mp;this.$.lp.openCallback=function(idx){mp.openPage(idx)};this.$.lp.refresh()},handleKeyPress:function(inSender,inEvent){for(var key in Config.keys){if(key.substring(0,2)=="C-"){if(inEvent.ctrlKey){var k=key.substring(2).charCodeAt(0);if(inEvent.charCode==k){var cmd=Config.keys[key];eval(cmd+";")}}}else{var k=key.charCodeAt(0);if(inEvent.charCode==k){var cmd=Config.keys[key];eval(cmd+";")}}}}});window.onload=function(){var obj=(new RadareApp).renderInto(document.body)};enyo.kind({name:"MainPanel",classes:"onyx",kind:"FittableRows",classes:"enyo-fit",style:"margin:0px;padding:0px;border:0px",data:null,buttonClicked:function(x){alert("let's play!")},cancelClicked:function(x){alert("nothing to see here! move along.")},inputKey:function(inSender,inEvent){if(inEvent.keyCode===13){var off=this.$.input.getValue();r2ui.opendis(off)}},goRename:function(){var msg=prompt("New name?","");if(msg)r2.cmd("afr "+msg,function(){r2ui.seek("$$",true)})},goComment:function(){var msg=prompt("Comment?","");if(msg)r2.cmd("CC "+msg,function(){r2ui.seek("$$",true)})},goFlag:function(){var msg=prompt("Flag name?","");if(msg)r2.cmd("f "+msg,function(){r2ui.seek("$$",true)})},goUnflag:function(){r2.cmd("f-$$",function(){r2ui.seek("$$",true)})},goAnalyze:function(){r2.cmd("af",function(){r2ui.seek("$$",true)})},goCopy:function(){var msg=prompt("How many bytes?","");if(msg)r2.cmd("y "+msg,function(){r2ui.seek("$$",true)})},goPaste:function(){r2.cmd("yy",function(){r2ui.seek("$$",true)})},wrString:function(){var msg=prompt("Text","");if(msg)r2.cmd("w "+msg,function(){r2ui.seek("$$",true)})},wrOpcode:function(){var msg=prompt("Opcode","");if(msg)r2.cmd("wa "+msg,function(){r2ui.seek("$$",true)})},wrFile:function(){var msg=prompt("Filename","");if(msg)r2.cmd("wf "+msg,function(){r2ui.seek("$$",true)})},wrHex:function(){var msg=prompt("Hexpair","");if(msg)r2.cmd("wx "+msg,function(){r2ui.seek("$$",true)})},coCode:function(){var msg=prompt("How many bytes?","");if(msg)r2.cmd("y "+msg,function(){r2ui.seek("$$",true)})},coString:function(){r2.cmd("Cz",function(){r2ui.seek("$$",true)})},coData:function(){var msg=prompt("How many bytes?","");if(msg)r2.cmd("Cd "+msg,function(){r2ui.seek("$$",true)})},setTitle:function(title){if(title){this.$.title.setContent(title);this.$.title.setStyle("visibility:visible;top:8px");this.$.extra.setStyle("visibility:hidden;")}else{this.$.title.setStyle("visibility:hidden");this.$.extra.setStyle("visibility:visible;")}},components:[{kind:"onyx.Toolbar",components:[{kind:"onyx.Button",content:"[",ontap:"openSidebar",classes:"top"},{kind:"onyx.Button",content:"]",ontap:"openSidebar2",classes:"top"},{name:"title",tag:"h2",content:"Assembler",classes:"topbox",style:"visibility:hidden;"},{name:"extra",tag:"div",classes:"topbox",components:[{kind:"onyx.PickerDecorator",classes:"top",components:[{kind:"onyx.Button",content:"Actions"},{kind:"onyx.Picker",components:[{content:"Analyze",ontap:"goAnalyze"},{content:"Rename",ontap:"goRename"},{content:"Comment",ontap:"goComment"},{content:"Flag",ontap:"goFlag"},{content:"Unflag",ontap:"goUnflag"},{content:"Copy",ontap:"goCopy"},{content:"Paste",ontap:"goPaste"}]}]},{kind:"onyx.Button",content:"<",ontap:"prevSeek",classes:"top",style:"top:10px"},{kind:"onyx.Button",content:">",ontap:"nextSeek",classes:"top",style:"top:10px"},{kind:"onyx.InputDecorator",style:"width: 200px;top:10px",classes:"top",components:[{kind:"onyx.Input",name:"input",value:"entry0",onchange:"gotoSeek",onkeydown:"inputKey"}]},{kind:"onyx.PickerDecorator",classes:"top",components:[{kind:"onyx.Button",content:"Convert"},{kind:"onyx.Picker",components:[{content:"Data",ontap:"coData"},{content:"Code",ontap:"coCode"},{content:"String",ontap:"coString"}]}]},{kind:"onyx.PickerDecorator",classes:"top",components:[{kind:"onyx.Button",content:"Write"},{kind:"onyx.Picker",components:[{content:"File",ontap:"wrFile"},{content:"Hexpair",ontap:"wrHex"},{content:"String",ontap:"wrString"},{content:"Opcode",ontap:"wrOpcode"}]}]}]}]},{kind:"Panels",name:"panels",fit:true,draggable:false,realtimeFit:true,components:[{kind:"Disassembler",name:"pageDisassembler"},{kind:"Assembler",name:"pageAssembler"},{kind:"Hexdump",name:"pageHexdump"},{kind:"Graph",name:"pageGraph"},{kind:"Search",name:"pageSearch"},{kind:"Console",name:"pageConsole"},{kind:"Logs",name:"pageLogs"},{kind:"Script",name:"pageScript"},{kind:"Settings",name:"pageSettings"},{kind:"About",name:"pageAbout"}]}],create:function(){this.inherited(arguments);r2ui.panels=this.$.panels;this.$.panels.setIndex(0)},ra:null,openSidebar:function(){this.ra.setIndex(this.ra.index?0:1)},openSidebar2:function(){this.ra.setIndex(2)},rendered:function(){this.inherited(arguments)},openPage:function(idx){var str,sp=this.$.panels;var r=-1;switch(idx){case"Disassembler":r=0;break;case"Assembler":r=1;break;case"Hexdump":r=2;break;case"Graph":r=3;break;case"Search":r=4;break;case"Console":r=5;break;case"Logs":r=6;break;case"Script":r=7;break;case"Settings":r=8;break;case"About":r=9;break}if(r==-1){sp.setIndex(idx);return}eval("var x = this.$.page"+idx);switch(r){case 0:case 2:this.setTitle();break;default:this.setTitle(idx);break}sp.setIndex(r)},seekStack:[],nextSeek:function(){var addr=r2ui.history_next();if(!addr)return;r2ui.seek(addr,true)},prevSeek:function(){var addr=r2ui.history_prev();if(!addr)return;r2ui.seek(addr,true)},gotoSeek:function(){var addr=this.$.input.getValue();if(addr[0]=="!"){r2.cmd(addr.slice(1),function(x){alert(x)})}else{this.seekStack.push()}}});var r2={};var backward=false;var next_curoff=0;var next_lastoff=0;var prev_curoff=0;var prev_lastoff=0;r2.root="";function dump(obj){var x="";for(var a in obj)x+=a+"\n";alert(x)}function objtostr(obj){var str="";for(var a in obj)str+=a+": "+obj[a]+",\n";return str}function Ajax(method,uri,body,fn){var x=new XMLHttpRequest;x.open(method,uri,false);x.setRequestHeader("Accept","text/plain");x.setRequestHeader("Accept","text/html");x.setRequestHeader("Content-Type","application/x-ww-form-urlencoded; charset=UTF-8");x.onreadystatechange=function(y){if(x.status==200){if(fn)fn(x.responseText)}else console.error("ajax "+x.status)};x.send(body)}r2.assemble=function(offset,opcode,fn){var off=offset?"@"+offset:"";r2.cmd('"pa '+opcode+'"'+off,fn)};r2.disassemble=function(offset,bytes,fn){var off=offset?"@"+offset:"";var str="pi @b:"+bytes+off;r2.cmd(str,fn)};r2.get_hexdump=function(offset,length,cb){r2.cmd("px "+length+"@"+offset,cb)};r2.get_disasm=function(offset,length,cb){r2.cmd("pD "+length+"@"+offset,cb)};r2.config_set=function(fn){};r2.config_get=function(fn){};r2.set_flag_space=function(ns,fn){r2.cmd("fs "+ns,fn)};r2.set_flag_space=function(ns,fn){r2.cmd("fs "+ns,fn)};r2.get_flags=function(fn){r2.cmd("fj",function(x){fn(x?JSON.parse(x):[])})};r2.get_opcodes=function(off,n,cb){r2.cmd("pdj @"+off+"!"+n,function(json){cb(JSON.parse(json))})};r2.get_bytes=function(off,n,cb){r2.cmd("pcj @"+off+"!"+n,function(json){cb(JSON.parse(json))})};r2.get_info=function(cb){r2.cmd("ij",function(json){cb(JSON.parse(json))})};r2.bin_relocs=function(cb){r2.cmd("irj",function(json){cb(JSON.parse(json))})};r2.bin_imports=function(cb){r2.cmd("iij",function(json){cb(JSON.parse(json))})};r2.bin_symbols=function(cb){r2.cmd("isj",function(json){cb(JSON.parse(json))})};r2.bin_sections=function(cb){r2.cmd("iSj",function(json){cb(JSON.parse(json))})};r2.cmds=function(cmds,cb){if(cmds.length==0)return;var cmd=cmds[0];cmds=cmds.splice(1);function lala(){if(cmd==undefined||cmds.length==0){return}cmd=cmds[0];cmds=cmds.splice(1);r2.cmd(cmd,lala);if(cb)cb();return}r2.cmd(cmd,lala)};r2.cmd=function(c,cb){Ajax("GET",r2.root+"/cmd/"+encodeURI(c),"",function(x){if(cb)cb(x)})};r2.alive=function(cb){r2.cmd("b",function(o){var ret=false;if(o&&o.length()>0)ret=true;if(cb)cb(o)})};r2.get_logger=function(obj){if(typeof obj!="object")obj={};obj.last=0;obj.events={};obj.interval=null;r2.cmd("ll",function(x){obj.last=+x});obj.load=function(cb){r2.cmd("lj "+(obj.last+1),function(ret){if(cb)cb(JSON.parse(ret))})};obj.clear=function(cb){r2.cmd("l-",cb)};obj.send=function(msg,cb){r2.cmd("l "+msg,cb)};obj.refresh=function(cb){obj.load(function(ret){for(var i=0;iobj.last)obj.last=message[0]}if(cb)cb()})};obj.autorefresh=function(n){if(!n){if(obj.interval)obj.interval.stop();return}function to(){obj.refresh(function(){});setTimeout(to,n*1e3);return true}obj.interval=setTimeout(to,n*1e3)};obj.on=function(ev,cb){obj.events[ev]=cb;return obj};return obj};r2.filter_asm=function(x,display){var curoff=backward?prev_curoff:next_curoff;var lastoff=backward?prev_lastoff:next_lastoff;var lines=x.split(/\n/g);r2.cmd("s",function(x){curoff=x});for(var i=lines.length-1;i>0;i--){var a=lines[i].match(/0x([a-fA-F0-9]+)/);if(a&&a.length>0){lastoff=a[0].replace(/:/g,"");break}}if(display=="afl"){var z="";for(var i=0;i"+space+"\n"}x=z}else{}}else if(display[0]=="i"){if(display[1]){var z="";for(var i=0;ifunction:");x=x.replace(/;(\s+)/g,";");x=x.replace(/;(.*)/g,"// $1");x=x.replace(/(bl|goto|call)/g,"call");x=x.replace(/(jmp|bne|beq|js|jnz|jae|jge|jbe|jg|je|jl|jz|jb|ja|jne)/g,"$1");x=x.replace(/(dword|qword|word|byte|movzx|movsxd|cmovz|mov\ |lea\ )/g,"$1");x=x.replace(/(hlt|leave|iretd|retn|ret)/g,"$1");x=x.replace(/(add|sbb|sub|mul|div|shl|shr|and|not|xor|inc|dec|sar|sal)/g,"$1");x=x.replace(/(push|pop)/g,"$1");x=x.replace(/(test|cmp)/g,"$1");x=x.replace(/(outsd|out|string|invalid|int |int3|trap|main|in)/g,"$1");x=x.replace(/nop/g,"nop");x=x.replace(/(sym|fcn|str|imp|loc).([^:<(\\\/ \|)\->]+)/g,"$1.$2")}x=x.replace(/0x([a-zA-Z0-9]+)/g,"0x$1");if(backward){prev_curoff=curoff;prev_lastoff=lastoff}else{next_curoff=curoff;next_lastoff=lastoff;if(!prev_curoff)prev_curoff=next_curoff}return x};var r2ui={};r2ui.history=[];r2ui.history_idx=0;r2ui.history_push=function(x){if(r2ui.history_idx!=r2ui.history.length)r2ui.history=r2ui.history.splice(0,r2ui.history_idx);r2ui.history_idx++;r2ui.history.push(x)};r2ui.history_pop=function(){if(r2ui.history_idx==r2ui.history.length)r2ui.history_idx--;return r2ui.history.pop()};r2ui.history_prev=function(){if(r2ui.history_idx>1)r2ui.history_idx--;var ret=r2ui.history[r2ui.history_idx-1];return ret};r2ui.history_next=function(){var ret=r2ui.history[r2ui.history_idx];if(r2ui.history_idx0x"+x[i].offset.toString(16)+" "+x[i].name+"\n";return z}enyo.kind({name:"RightPanel",style:"background-color:#404040;",classes:"onyx-toolbar",kind:"FittableRows",ra:null,components:[{kind:"FittableColumns",style:"margin-bottom:5px",components:[{kind:"onyx.Button",content:"[",ontap:"closeSidebar",style:"padding:8px;margin-right:8px"},{onup:"toggleScroll",style:"position:absolute;left:40px;top:0px;",kind:"onyx.MenuDecorator",onSelect:"itemSelected",components:[{content:"List elements"},{kind:"onyx.Menu",showOnTop:true,maxHeight:290,name:"menu",style:"height:300px",components:[{content:"flags",value:"2"},{content:"flagspaces",value:"2"},{classes:"onyx-menu-divider"},{content:"strings",value:"1"},{content:"symbols",value:"1"},{content:"imports",value:"1"},{content:"relocs",value:"1"},{content:"functions",value:"1"},{content:"comments",value:"1"},{classes:"onyx-menu-divider"},{content:"registers",value:"1"},{content:"stack",value:"2"},{content:"backtrace",value:"3"}]}]}]},{kind:"Scroller",animated:false,fit:true,horizontal:false,name:"scroll",components:[{tag:"pre",style:"font-size:14px",allowHtml:true,name:"output",content:".."}]}],toggleScroll:function(){var is_visible=this.$.menu.getShowing();this.$.scroll.setShowing(is_visible)},rowTap:function(){},create:function(){this.inherited(arguments)},data:[],setupItem:function(inSender,inIndex){var item=this.data[inIndex.index];if(!item)return false;var msg=item.name+" "+item.offset;console.log(msg);this.$.msg.setContent(msg);return true},refresh:function(){},itemSelected:function(inSender,inEvent){var self=this;var selected=inEvent.originator.content;var is_visible=this.$.menu.getShowing();r2ui.rp=self;this.$.scroll.setShowing(!!!is_visible);this.$.menu.setShowing(false);this.$.scroll.scrollToTop();switch(selected){case"comments":r2.cmd("CC*",function(x){x=x.replace(/0x([a-zA-Z0-9]*)/g,"0x$1");self.$.output.setContent(x)});break;case"functions":r2.cmd("afl",function(x){x=x.replace(/0x([a-zA-Z0-9]*)/g,"0x$1");self.$.output.setContent(x)});break;case"flagspaces":this.updateFlagspace();break;case"strings":r2.cmd("izj",function(x){var s=JSON.parse(x);var h="";for(var i in s){var off=(+s[i]["offset"]).toString(16);h+='0x'+off+" "+s[i]["string"]+"
"}self.$.output.setContent(h)});break;case"sections":r2.bin_sections(function(x){self.$.output.setContent(makelist(x))});break;case"symbols":r2.bin_symbols(function(x){self.$.output.setContent(makelist(x))});break;case"relocs":r2.bin_relocs(function(x){self.$.output.setContent(makelist(x))});break;case"imports":r2.bin_imports(function(x){self.$.output.setContent(makelist(x))});break;case"flags":r2.get_flags(function(flags){self.data=flags;self.$.output.setContent(makelist(flags));self.refresh()});break}},closeSidebar:function(){this.ra.setIndex(1)},selectFlagspace:function(x){r2.cmd("fs "+x,function(x){r2ui.rp.updateFlagspace()})},updateFlagspace:function(){var self=r2ui.rp;r2.cmd("fsj",function(x){var s=JSON.parse(x);var h="";for(var i in s){var nam=s[i].name;var sel=s[i].selected;h+='"+nam+" "+(sel?" (selected)":"")+"
"}self.$.output.setContent(h)})}});enyo.kind({name:"Script",kind:"Scroller",style:"background-color:#c0c0c0",clear:function(){with(this.$.input){setContent(value="");render()}},demo:function(){with(this.$.input){setContent(value=['r2.disassemble (0, "9090", function(text) {'," show (text)"," show ()",' r2.assemble (0, "mov eax, 33", function (text) {'," show (text);"," });"," show (r2)","});"].join("\n"));render()}},run:function(){var code=this.$.input.value;var out="";function show(x){if(!x)out+="\n";else if(typeof x=="object"){out+="{";for(var y in x){var v=x[y];out+=y+": "+v+"\n , "}out+="}"}else{out+=x+"\n"}}try{eval(code);this.$.output.setContent(out)}catch(e){alert(e)}},components:[{tag:"p",style:"margin-left:10px",components:[{kind:"onyx.Button",content:"Run",classes:"sourcebutton",ontap:"run"},{kind:"onyx.Button",content:"Clear",classes:"sourcebutton",ontap:"clear"},{kind:"onyx.Button",content:"Demo",classes:"sourcebutton",ontap:"demo"}]},{kind:"onyx.TextArea",name:"input",classes:"sourcecode"},{tag:"pre",name:"output",style:"margin-left:12px"}]});enyo.kind({name:"Search",kind:"Scroller",style:"background-color:#303030",components:[{tag:"center",components:[{tag:"h1",style:"color:#f0f0f0",content:"TODO: Search"}]}]});enyo.kind({name:"Settings",classes:"panels-sample-sliding-content r2panel",kind:"Scroller",tag:"div",style:"color:black !important;padding:0px;margin:0px;border:0px;overflow:hidden",components:[{kind:"FittableRows",fit:false,components:[{tag:"h2",content:"General"},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Two panels",classes:"rowline"},{kind:"onyx.ToggleButton",name:"twopanels"}]},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Edit keybindings",classes:"rowline"},{kind:"onyx.Button",content:"+"}]}]},{kind:"FittableRows",fit:false,components:[{tag:"h2",content:"Target"},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Arch",classes:"rowline"},{kind:"onyx.PickerDecorator",components:[{},{kind:"onyx.Picker",name:"arch",components:[{content:"arc"},{content:"arm"},{content:"avr"},{content:"ppc"},{content:"bf"},{content:"dalvik"},{content:"dcpu16"},{content:"i8080"},{content:"java"},{content:"m68k"},{content:"mips"},{content:"msil"},{content:"rar"},{content:"sh"},{content:"sparc"},{content:"x86",active:true},{content:"z80"}]}]}]},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Bits",classes:"rowline"},{kind:"onyx.PickerDecorator",components:[{},{kind:"onyx.Picker",name:"bits",components:[{content:"8"},{content:"16"},{content:"32",active:true},{content:"64"}]}]}]},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Endian",classes:"rowline"},{kind:"onyx.PickerDecorator",components:[{},{kind:"onyx.Picker",components:[{content:"little",active:true},{content:"big"}]}]}]},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"OS",classes:"rowline"},{kind:"onyx.PickerDecorator",components:[{},{kind:"onyx.Picker",components:[{content:"linux",active:true},{content:"darwin"},{content:"w32"},{content:"dos"}]}]}]},{tag:"h2",content:"Disassembly"},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Show bytes",classes:"rowline",ontap:"nextPanel"},{kind:"onyx.ToggleButton",name:"toggle_bytes"}]},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Show offsets",classes:"rowline",ontap:"nextPanel"},{kind:"onyx.ToggleButton",name:"toggle_offset"}]},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Show lines",classes:"rowline",ontap:"nextPanel"},{kind:"onyx.ToggleButton",name:"toggle_lines"}]},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Pseudo",classes:"rowline",ontap:"nextPanel"},{kind:"onyx.ToggleButton",name:"toggle_pseudo"}]}]},{tag:"h2",content:"Save changes?"},{tag:"div",style:"margin-left:50px",components:[{ontap:"reset",kind:"onyx.Button",style:"position:relative;left:0px",content:"Reset"},{ontap:"save",kind:"onyx.Button",style:"position:relative;left:50px",content:"Save",classes:"onyx-affirmative"}]},{tag:"div",style:"height:64px"}],load:function(){var self=this; self.$.twopanels.setActive(document.referrer.indexOf("/two")!=-1);r2.cmd("e asm.bytes",function(x){self.$.toggle_bytes.setActive(x[0]=="t")});r2.cmd("e asm.pseudo",function(x){self.$.toggle_pseudo.setActive(x[0]=="t")});r2.cmd("e asm.offset",function(x){self.$.toggle_offset.setActive(x[0]=="t")})},create:function(){this.inherited(arguments);this.load()},save:function(){var arch=this.$.arch.selected.content;var bits=this.$.bits.selected.content;var show_bytes=this.$.toggle_bytes.active;var show_pseudo=this.$.toggle_pseudo.active;var show_offset=this.$.toggle_offset.active;var twopanels=this.$.twopanels.active;r2.cmds(["e asm.arch="+arch,"e asm.bits="+bits,"e asm.bytes="+show_bytes,"e asm.offset="+show_offset,"e asm.pseudo="+show_pseudo]);if(twopanels){window.parent.location="/enyo/two"}else{window.parent.location="/enyo/"}r2ui.seek("$$",true)},reset:function(){this.load()}}); \ No newline at end of file diff --git a/shlr/www/enyo/js/r2.js b/shlr/www/enyo/js/r2.js index 11967f1951..1c3088823c 100644 --- a/shlr/www/enyo/js/r2.js +++ b/shlr/www/enyo/js/r2.js @@ -96,6 +96,11 @@ r2.get_info = function (cb) { cb (JSON.parse (json)); }); } +r2.bin_relocs = function (cb) { + r2.cmd ("irj", function (json) { + cb (JSON.parse (json)); + }); +} r2.bin_imports = function (cb) { r2.cmd ("iij", function (json) { cb (JSON.parse (json)); diff --git a/shlr/www/enyo/js/rightpanel.js b/shlr/www/enyo/js/rightpanel.js index 5427e54811..2508458e13 100644 --- a/shlr/www/enyo/js/rightpanel.js +++ b/shlr/www/enyo/js/rightpanel.js @@ -24,6 +24,7 @@ enyo.kind ({ {content: "strings", value: "1"}, {content: "symbols", value: "1"}, {content: "imports", value: "1"}, + {content: "relocs", value: "1"}, {content: "functions", value: "1"}, {content: "comments", value: "1"}, {classes: "onyx-menu-divider"}, @@ -122,6 +123,11 @@ enyo.kind ({ self.$.output.setContent (makelist (x)); }); break; + case "relocs": + r2.bin_relocs (function (x) { + self.$.output.setContent (makelist (x)); + }); + break; case "imports": r2.bin_imports (function (x) { self.$.output.setContent (makelist (x)); diff --git a/shlr/www/graph/index.html b/shlr/www/graph/index.html index 2669c304bc..efa8574a92 100644 --- a/shlr/www/graph/index.html +++ b/shlr/www/graph/index.html @@ -19,6 +19,10 @@ body { window.onresize = function () { resizeCanvas (); } + +function resizeBlocks() { +} + function Ajax (method, uri, body, fn) { var x = new XMLHttpRequest (); x.open (method, uri, false); diff --git a/shlr/www/graph/js-graph-it.js b/shlr/www/graph/js-graph-it.js index 875779be0f..7c46faa20f 100644 --- a/shlr/www/graph/js-graph-it.js +++ b/shlr/www/graph/js-graph-it.js @@ -106,8 +106,7 @@ function movemouse(e) { elementToMove.style.right = null; elementToMove.style.bottom = null; - var i; - for(i = 0; i < blocksToMove.length; i++) { + for (var i = 0; i < blocksToMove.length; i++) { if (blocksToMove[i]) blocksToMove[i].onMove(); } @@ -296,39 +295,32 @@ function Canvas(htmlElement) { this.innerDiv.style.height = this.height + "px"; // init connectors - for(i = 0; i < this.connectors.length; i++) - { + for(i = 0; i < this.connectors.length; i++) { this.connectors[i].initConnector(); } } - this.visit = function(element) - { - if(element == this.htmlElement) + this.visit = function(element) { + if (element == this.htmlElement) return true; // check the element dimensions against the acutal size of the canvas this.width = Math.max(this.width, calculateOffsetLeft(element) - this.offsetLeft + element.offsetWidth); this.height = Math.max(this.height, calculateOffsetTop(element) - this.offsetTop + element.offsetHeight); - if(isBlock(element)) - { + if(isBlock(element)) { // block found initialize it var newBlock = new Block(element, this); newBlock.initBlock(); this.blocks.push(newBlock); return false; - } - else if(isConnector(element)) - { + } else if(isConnector(element)) { // connector found, just create it, source or destination blocks may not // have been initialized yet var newConnector = new Connector(element, this); this.connectors.push(newConnector); return false; - } - else - { + } else { // continue searching nested elements return true; } @@ -351,6 +343,28 @@ function Canvas(htmlElement) { return output; } + this.alignBlocks = function() + { + var i; + for (i = 0; i < this.blocks.length ; i++) { + var b = this.blocks[i]; //.findBlock(blockId); + b.onMove(); + // TODO: alert ("align "+b); + } + for(i = 0; i < this.connectors.length; i++) { + this.connectors[i].repaint(); + console.log( this.connectors[i]); + } + } + + this.fitBlocks = function() + { + var i; + for (i = 0; i < this.blocks.length ; i++) { + var b = this.blocks[i]; //.findBlock(blockId); + this.blocks[i].fit (); + } + } /* * This function searches for a nested block with a given id */ @@ -477,12 +491,31 @@ function Block(htmlElement, canvas) return result; } + + this.fit = function() + { + function getlines(txt) { + return (12*txt.split ("\n").length); + } + function getcolumns(txt) { + var cols = 0; + var txts = txt.split ("\n"); + for (var x in txts) { + const len = txts[x].length; + if (len>cols) + cols = len; + } + return 10+ (7*cols); + } + var text = this.htmlElement.innerHTML; + this.htmlElement.style.width = getcolumns (text); + this.htmlElement.style.height = getlines (text); + } this.move = function(left, top) { this.htmlElement.style.left = left; this.htmlElement.style.top = top; - this.onMove(); } @@ -536,46 +569,42 @@ function Segment(id, parentElement) if(this.nextSegment) { this.nextSegment.startX = this.getEndX(); - this.nextSegment.startY = this.getEndY(); + this.nextSegment.startY = this.getEndY(); } - if(this.visible) - this.htmlElement.style.display = 'block'; - else - this.htmlElement.style.display = 'none'; + this.htmlElement.style.display = this.visible?'block':'none'; - switch(this.orientation) - { - case LEFT: - this.htmlElement.style.left = (this.startX - this.length) + "px"; - this.htmlElement.style.top = this.startY + "px"; + switch (this.orientation) { + case LEFT: + this.htmlElement.style.left = (this.startX - this.length) + "px"; + this.htmlElement.style.top = this.startY + "px"; + this.htmlElement.style.width = this.length + "px"; + this.htmlElement.style.height = this.thickness + "px"; + break; + case RIGHT: + this.htmlElement.style.left = this.startX + "px"; + this.htmlElement.style.top = this.startY + "px"; + if(this.nextSegment) + this.htmlElement.style.width = this.length + this.thickness + "px"; + else this.htmlElement.style.width = this.length + "px"; - this.htmlElement.style.height = this.thickness + "px"; - break; - case RIGHT: - this.htmlElement.style.left = this.startX + "px"; - this.htmlElement.style.top = this.startY + "px"; - if(this.nextSegment) - this.htmlElement.style.width = this.length + this.thickness + "px"; - else - this.htmlElement.style.width = this.length + "px"; - this.htmlElement.style.height = this.thickness + "px"; - break; - case UP: - this.htmlElement.style.left = this.startX + "px"; - this.htmlElement.style.top = (this.startY - this.length) + "px"; - this.htmlElement.style.width = this.thickness + "px"; + this.htmlElement.style.height = this.thickness + "px"; + break; + case UP: + this.htmlElement.style.left = this.startX + "px"; + this.htmlElement.style.top = (this.startY - this.length) + "px"; + this.htmlElement.style.width = this.thickness + "px"; + this.htmlElement.style.height = this.length + "px"; + break; + case DOWN: + this.htmlElement.style.left = this.startX + "px"; + this.htmlElement.style.top = this.startY + "px"; + this.htmlElement.style.width = this.thickness + "px"; + if(this.nextSegment) + this.htmlElement.style.height = this.length + this.thickness + "px"; + else this.htmlElement.style.height = this.length + "px"; - break; - case DOWN: - this.htmlElement.style.left = this.startX + "px"; - this.htmlElement.style.top = this.startY + "px"; - this.htmlElement.style.width = this.thickness + "px"; - if(this.nextSegment) - this.htmlElement.style.height = this.length + this.thickness + "px"; - else - this.htmlElement.style.height = this.length + "px"; - break; + break; } if(this.nextSegment) @@ -599,14 +628,12 @@ function Segment(id, parentElement) /** * Returns the "top" coordinate of the end point of this segment */ - this.getEndY = function() - { - switch(this.orientation) - { - case LEFT: return this.startY; - case RIGHT: return this.startY; - case DOWN: return this.startY + this.length; - case UP: return this.startY - this.length; + this.getEndY = function() { + switch (this.orientation) { + case LEFT: return this.startY; + case RIGHT: return this.startY; + case DOWN: return this.startY + this.length; + case UP: return this.startY - this.length; } } @@ -1166,6 +1193,8 @@ function initPageObjects() var newCanvas = new Canvas(divs[i]); newCanvas.initCanvas(); canvases.push(newCanvas); + newCanvas.fitBlocks(); + newCanvas.alignBlocks(); } } } @@ -1176,7 +1205,6 @@ function initPageObjects() * Utility functions */ - function findCanvas(canvasId) { for (var i = 0; i < canvases.length; i++) if(canvases[i].id == canvasId) @@ -1709,8 +1737,9 @@ function VerticalCStrategy(connector, startOrientation) } strategies[0] = function(connector) {return new VerticalSStrategy(connector)}; +strategies[1] = function(connector) {return new HorizontalSStrategy(connector)}; /* -strategies[0] = function(connector) {return new HorizontalSStrategy(connector)}; +strategies[2] = function(connector) {return new HorizontalCStrategy(connector, LEFT)}; strategies[1] = function(connector) {return new VerticalSStrategy(connector)}; strategies[2] = function(connector) {return new HorizontalLStrategy(connector)}; strategies[3] = function(connector) {return new VerticalLStrategy(connector)};