@@ -2452,6 +2452,49 @@ static bool mw(int *ec, ut64 addr, const ut8 *old, const ut8 *buf, int len) {
24522452 return true;
24532453}
24542454
2455+ static bool anal_rr (void * _reg , const char * name , ut64 * val ) {
2456+ RReg * reg = _reg ;
2457+ RRegItem * ri = r_reg_get (reg , name , -1 );
2458+ if (ri ) {
2459+ #if 0
2460+ if (len ) {
2461+ * len = ri -> size ;
2462+ }
2463+ #endif
2464+ if (val ) {
2465+ * val = r_reg_get_value (reg , ri );
2466+ }
2467+ return true;
2468+ }
2469+ return false;
2470+ }
2471+
2472+ static bool anal_rw (void * _reg , const char * name , ut64 val ) {
2473+ RReg * reg = _reg ;
2474+ return r_reg_setv (reg , name , val );
2475+ }
2476+
2477+ static bool anal_mw (void * user , ut64 addr , const ut8 * buf , int len ) {
2478+ RCore * core = user ;
2479+ r_io_write_at (core -> io , addr , buf , len );
2480+ return true;
2481+ }
2482+
2483+ static bool anal_mr (void * user , ut64 addr , ut8 * buf , int len ) {
2484+ RCore * core = user ;
2485+ (void )r_io_read_at (core -> io , addr , (ut8 * )buf , len );
2486+ return true;
2487+ }
2488+
2489+ static bool anal_ir (void * _reg , const char * name ) {
2490+ RReg * reg = _reg ;
2491+ RRegItem * ri = r_reg_get (reg , name , -1 );
2492+ if (ri ) {
2493+ return true;
2494+ }
2495+ return false;
2496+ }
2497+
24552498#if 0
24562499static bool rw (void * null , const char * regname , ut64 old , ut64 num ) {
24572500 return true;
@@ -2544,6 +2587,20 @@ static inline REsil *esil_new_setup(RCore *core) {
25442587 const char * et = r_config_get (core -> config , "cmd.esil.trap" );
25452588 esil -> cmd_trap = R_STR_ISNOTEMPTY (et )? strdup (et ): NULL ;
25462589 }
2590+ esil -> user = core ;
2591+ // reg
2592+ esil -> reg_if .reg = core -> anal -> reg ;
2593+ esil -> reg_if .reg_write = anal_rw ;
2594+ esil -> reg_if .reg_read = anal_rr ;
2595+ esil -> reg_if .is_reg = anal_ir ;
2596+ // mem
2597+ esil -> mem_if .user = core ;
2598+ esil -> mem_if .mem_read = anal_mr ;
2599+ esil -> mem_if .mem_write = anal_mw ;
2600+ #if 0
2601+ esil -> cb .hook_mem_write = anal_mw ;
2602+ esil -> cb .hook_mem_read = anal_mr ;
2603+ #endif
25472604 // run the esilcb from arch
25482605 if (core -> anal -> arch ) {
25492606 r_arch_esilcb (core -> anal -> arch , R_ARCH_ESIL_ACTION_INIT );
@@ -8046,11 +8103,9 @@ static bool mymemread(REsil *esil, ut64 addr, ut8 *buf, int len) {
80468103 return false;
80478104 }
80488105 n = R_NEW (AeaMemItem );
8049- if (n ) {
8050- n -> addr = addr ;
8051- n -> size = len ;
8052- r_list_push (mymemxsr , n );
8053- }
8106+ n -> addr = addr ;
8107+ n -> size = len ;
8108+ r_list_push (mymemxsr , n );
80548109 return true;
80558110}
80568111
@@ -8415,6 +8470,7 @@ static void cmd_aespc(RCore *core, ut64 addr, ut64 until_addr, int ninstr) {
84158470 break ;
84168471 default :
84178472 r_reg_setv (core -> anal -> reg , "PC" , aop .addr + aop .size );
8473+ eprintf ("%p\n" , esil -> cb .hook_reg_write );
84188474 r_reg_setv (core -> dbg -> reg , "PC" , aop .addr + aop .size );
84198475 const char * e = R_STRBUF_SAFEGET (& aop .esil );
84208476 if (R_STR_ISNOTEMPTY (e )) {
0 commit comments