1- use std:: io:: Write ;
2- use std:: num:: ParseIntError ;
3- use std:: sync:: atomic;
41use crate :: emu:: Emu ;
52use crate :: peb:: peb32;
63use crate :: peb:: peb64;
@@ -9,11 +6,15 @@ use crate::structures;
96use crate :: to32;
107use crate :: winapi:: winapi32;
118use crate :: winapi:: winapi64;
9+ use std:: io:: Write ;
10+ use std:: num:: ParseIntError ;
11+ use std:: sync:: atomic;
1212
1313// if the user types "r2 0x123" will execute radare2
14- use std :: process :: { Command , Stdio } ;
14+ use crate :: maps :: mem64 :: Permission ;
1515use std:: fs;
1616use std:: io;
17+ use std:: process:: { Command , Stdio } ;
1718
1819pub struct Console { }
1920
@@ -163,22 +164,25 @@ impl Console {
163164 }
164165
165166 pub fn spawn_radare2 ( addr : u64 , emu : & mut Emu ) {
166-
167167 let mem = match emu. maps . get_mem_by_addr ( addr) {
168168 Some ( m) => m,
169169 None => {
170170 log:: info!( "address not found on any map" ) ;
171- return
171+ return ;
172172 }
173173 } ;
174174
175175 let tmpfile = format ! ( "/tmp/{}.r2" , mem. get_name( ) ) ;
176176 mem. save_all ( & tmpfile) ;
177177
178- let base = format ! ( "0x{:x}" , mem. get_base( ) ) ;
179- let seek = format ! ( "0x{:x}" , addr) ;
178+ let base = format ! ( "0x{:x}" , mem. get_base( ) ) ;
179+ let seek = format ! ( "0x{:x}" , addr) ;
180180 let bits;
181- if emu. cfg . is_64bits { bits = "64" } else { bits = "32" }
181+ if emu. cfg . is_64bits {
182+ bits = "64"
183+ } else {
184+ bits = "32"
185+ }
182186 let precmd = format ! ( "dr rax={}?; dr rbx={}?; dr rcx={}?; dr rdx={}?; dr rsi={}?;
183187 dr rdi={}?; dr rbp={}?; dr rsp={}?; dr rip={}?; dr r8={}?
184188 dr r9={}?; dr r10={}?; dr r11={}?; dr r12={}?; dr r13={}?;
@@ -189,30 +193,25 @@ impl Console {
189193 emu. regs( ) . r11, emu. regs( ) . r12, emu. regs( ) . r13, emu. regs( ) . r14,
190194 emu. regs( ) . r15) ;
191195 let r2args = vec ! [
192- "-n" ,
193- "-a" , "x86" ,
194- "-b" , & bits,
195- "-m" , & base,
196- "-s" , & seek,
197- "-c" , & precmd,
198- & tmpfile
196+ "-n" , "-a" , "x86" , "-b" , & bits, "-m" , & base, "-s" , & seek, "-c" , & precmd, & tmpfile,
199197 ] ;
200198
201199 log:: info!( "spawning radare2 software." ) ;
202-
200+
203201 match Command :: new ( "radare2" )
204202 . args ( & r2args)
205203 . stdin ( Stdio :: inherit ( ) )
206204 . stdout ( Stdio :: inherit ( ) )
207205 . stderr ( Stdio :: inherit ( ) )
208- . spawn ( ) {
209- Ok ( mut child) => {
210- let _ = child. wait ( ) ;
211- }
212- Err ( e) => {
213- log:: error!( "Install radare first! {}" , e) ;
214- return
215- }
206+ . spawn ( )
207+ {
208+ Ok ( mut child) => {
209+ let _ = child. wait ( ) ;
210+ }
211+ Err ( e) => {
212+ log:: error!( "Install radare first! {}" , e) ;
213+ return ;
214+ }
216215 }
217216
218217 if let Err ( e) = fs:: remove_file ( & tmpfile) {
@@ -222,7 +221,6 @@ impl Console {
222221 }
223222 }
224223
225-
226224 pub fn spawn_console ( emu : & mut Emu ) {
227225 if !emu. cfg . console_enabled {
228226 return ;
@@ -520,7 +518,7 @@ impl Console {
520518 }
521519 } ;
522520 emu. maps
523- . create_map ( & name, addr, sz)
521+ . create_map ( & name, addr, sz, Permission :: READ_WRITE_EXECUTE )
524522 . expect ( "cannot create map from console mc" ) ;
525523 log:: info!( "allocated {} at 0x{:x} sz: {}" , name, addr, sz) ;
526524 }
@@ -546,7 +544,7 @@ impl Console {
546544 } ;
547545
548546 emu. maps
549- . create_map ( & name, addr, sz)
547+ . create_map ( & name, addr, sz, Permission :: READ_WRITE_EXECUTE )
550548 . expect ( "cannot create map from console mca" ) ;
551549 log:: info!( "allocated {} at 0x{:x} sz: {}" , name, addr, sz) ;
552550 }
@@ -578,7 +576,10 @@ impl Console {
578576 }
579577 } ;
580578
581- let mem = emu. maps . get_mem_by_addr ( addr) . expect ( "address not found on any map" ) ;
579+ let mem = emu
580+ . maps
581+ . get_mem_by_addr ( addr)
582+ . expect ( "address not found on any map" ) ;
582583 if emu. cfg . is_64bits {
583584 log:: info!(
584585 "map: {} 0x{:x}-0x{:x} ({})" ,
@@ -1033,14 +1034,13 @@ impl Console {
10331034 if parts. len ( ) >= 2 {
10341035 emu. maps . print_maps_keyword ( & parts[ 1 ] ) ;
10351036 }
1036-
10371037 } else if cmd. starts_with ( "r2 " ) {
1038- let parts: Vec < & str > = cmd. split_whitespace ( ) . collect ( ) ;
1039- if parts. len ( ) >= 2 {
1040- if let Ok ( addr) = u64:: from_str_radix ( parts[ 1 ] . trim_start_matches ( "0x" ) , 16 ) {
1041-
1038+ let parts: Vec < & str > = cmd. split_whitespace ( ) . collect ( ) ;
1039+ if parts. len ( ) >= 2 {
1040+ if let Ok ( addr) =
1041+ u64:: from_str_radix ( parts[ 1 ] . trim_start_matches ( "0x" ) , 16 )
1042+ {
10421043 Console :: spawn_radare2 ( addr, emu) ;
1043-
10441044 } else {
10451045 println ! ( "wrong hexa parameter" ) ;
10461046 }
@@ -1052,11 +1052,10 @@ impl Console {
10521052 }
10531053 }
10541054 } // match commands
1055-
1055+
10561056 if emu. cfg . command . is_some ( ) {
10571057 std:: process:: exit ( 1 ) ;
10581058 }
1059-
10601059 } // end loop
10611060 } // end commands function
10621061}
0 commit comments