@@ -5266,7 +5266,14 @@ static void cccb(void *u) {
52665266}
52675267
52685268// dup with isValidAddress wtf
5269- static bool myvalid (RIO * io , ut64 addr ) {
5269+ static bool myvalid (RCore * core , ut64 addr ) {
5270+ RIO * io = core -> io ;
5271+ #if 1
5272+ RFlagItem * fi = r_flag_get_i (core -> flags , addr );
5273+ if (fi && strchr (fi -> name , '.' )) {
5274+ return true;
5275+ }
5276+ #endif
52705277 if (addr < 0x100 ) {
52715278 return false;
52725279 }
@@ -5363,7 +5370,7 @@ static bool esilbreak_mem_write(REsil *esil, ut64 addr, const ut8 *buf, int len)
53635370 RCore * core = esil -> anal -> coreb .core ;
53645371 handle_var_stack_access (esil , addr , R_PERM_W , len );
53655372 // ignore writes in stack
5366- if (myvalid (core -> io , addr ) && r_io_read_at (core -> io , addr , (ut8 * )buf , len )) {
5373+ if (myvalid (core , addr ) && r_io_read_at (core -> io , addr , (ut8 * )buf , len )) {
53675374 if (!is_stack (core -> io , addr )) {
53685375 r_anal_xrefs_set (core -> anal , esil -> addr , addr , R_ANAL_REF_TYPE_DATA | R_ANAL_REF_TYPE_WRITE );
53695376 /** resolve ptr */
@@ -5388,7 +5395,7 @@ static bool esilbreak_mem_read(REsil *esil, ut64 addr, ut8 *buf, int len) {
53885395 esilbreak_last_read = addr ;
53895396 }
53905397 handle_var_stack_access (esil , addr , R_PERM_R , len );
5391- if (myvalid (core -> io , addr ) && r_io_read_at (core -> io , addr , (ut8 * )buf , len )) {
5398+ if (myvalid (core , addr ) && r_io_read_at (core -> io , addr , (ut8 * )buf , len )) {
53925399 ut64 refptr = UT64_MAX ;
53935400 bool trace = true;
53945401 switch (len ) {
@@ -5410,7 +5417,7 @@ static bool esilbreak_mem_read(REsil *esil, ut64 addr, ut8 *buf, int len) {
54105417 break ;
54115418 }
54125419 // TODO incorrect
5413- if (trace && myvalid (core -> io , refptr )) {
5420+ if (trace && myvalid (core , refptr )) {
54145421 if (ntarget == UT64_MAX || ntarget == refptr ) {
54155422 str [0 ] = 0 ;
54165423 if (r_io_read_at (core -> io , refptr , str , sizeof (str )) < 1 ) {
@@ -5424,7 +5431,7 @@ static bool esilbreak_mem_read(REsil *esil, ut64 addr, ut8 *buf, int len) {
54245431 }
54255432 }
54265433 }
5427- if (myvalid (core -> io , addr ) && r_io_read_at (core -> io , addr , (ut8 * )buf , len )) {
5434+ if (myvalid (core , addr ) && r_io_read_at (core -> io , addr , (ut8 * )buf , len )) {
54285435 if (!is_stack (core -> io , addr )) {
54295436 r_anal_xrefs_set (core -> anal , esil -> addr , addr , R_ANAL_REF_TYPE_DATA | R_ANAL_REF_TYPE_READ );
54305437 }
@@ -6024,6 +6031,37 @@ R_API void r_core_anal_esil(RCore *core, const char *str /* len */, const char *
60246031 if (CHECKREF (ESIL -> cur )) {
60256032 r_anal_xrefs_set (core -> anal , cur , ESIL -> cur , R_ANAL_REF_TYPE_STRN | R_ANAL_REF_TYPE_READ );
60266033 }
6034+ #if 0
6035+ ut64 dst = esilbreak_last_read ;
6036+ if (dst != UT64_MAX && CHECKREF (dst )) {
6037+ if (myvalid (core , dst )) {
6038+ r_anal_xrefs_set (core -> anal , cur , dst , R_ANAL_REF_TYPE_DATA | R_ANAL_REF_TYPE_READ );
6039+ if (cfg_anal_strings ) {
6040+ add_string_ref (core , op .addr , dst );
6041+ }
6042+ }
6043+ }
6044+ #if 0
6045+ dst = r_reg_getv (core -> anal -> reg , "tmp" );
6046+ if (dst != UT64_MAX && CHECKREF (dst )) {
6047+ if (myvalid (core , dst )) {
6048+ r_anal_xrefs_set (core -> anal , cur , dst , R_ANAL_REF_TYPE_DATA | R_ANAL_REF_TYPE_READ );
6049+ if (cfg_anal_strings ) {
6050+ add_string_ref (core , op .addr , dst );
6051+ }
6052+ }
6053+ }
6054+ #endif
6055+ dst = esilbreak_last_data ;
6056+ if (dst != UT64_MAX && CHECKREF (dst )) {
6057+ if (myvalid (core , dst )) {
6058+ r_anal_xrefs_set (core -> anal , cur , dst , R_ANAL_REF_TYPE_DATA | R_ANAL_REF_TYPE_READ );
6059+ if (cfg_anal_strings ) {
6060+ add_string_ref (core , op .addr , dst );
6061+ }
6062+ }
6063+ }
6064+ #endif
60276065 } else if ((target && op .ptr == ntarget ) || !target ) {
60286066 if (CHECKREF (ESIL -> cur )) {
60296067 if (op .ptr && r_io_is_valid_offset (core -> io , op .ptr , !core -> anal -> opt .noncode )) {
@@ -6073,7 +6111,7 @@ R_API void r_core_anal_esil(RCore *core, const char *str /* len */, const char *
60736111 break ;
60746112 }
60756113 if ((target && dst == ntarget ) || !target ) {
6076- if (dst > 0xffff && opsrc1 && (dst & 0xffff ) == (opsrc1 -> imm & 0xffff ) && myvalid (core -> io , dst )) {
6114+ if (dst > 0xffff && opsrc1 && (dst & 0xffff ) == (opsrc1 -> imm & 0xffff ) && myvalid (core , dst )) {
60776115 RFlagItem * f ;
60786116 char * str ;
60796117 if (CHECKREF (dst ) || CHECKREF (cur )) {
@@ -6109,7 +6147,7 @@ R_API void r_core_anal_esil(RCore *core, const char *str /* len */, const char *
61096147 {
61106148 ut64 dst = esilbreak_last_read ;
61116149 if (dst != UT64_MAX && CHECKREF (dst )) {
6112- if (myvalid (core -> io , dst )) {
6150+ if (myvalid (core , dst )) {
61136151 r_anal_xrefs_set (core -> anal , cur , dst , R_ANAL_REF_TYPE_DATA | R_ANAL_REF_TYPE_READ );
61146152 if (cfg_anal_strings ) {
61156153 add_string_ref (core , op .addr , dst );
@@ -6118,7 +6156,7 @@ R_API void r_core_anal_esil(RCore *core, const char *str /* len */, const char *
61186156 }
61196157 dst = esilbreak_last_data ;
61206158 if (dst != UT64_MAX && CHECKREF (dst )) {
6121- if (myvalid (core -> io , dst )) {
6159+ if (myvalid (core , dst )) {
61226160 r_anal_xrefs_set (core -> anal , cur , dst , R_ANAL_REF_TYPE_DATA | R_ANAL_REF_TYPE_READ );
61236161 if (cfg_anal_strings ) {
61246162 add_string_ref (core , op .addr , dst );
@@ -6131,7 +6169,7 @@ R_API void r_core_anal_esil(RCore *core, const char *str /* len */, const char *
61316169 {
61326170 ut64 dst = op .jump ;
61336171 if (CHECKREF (dst )) {
6134- if (myvalid (core -> io , dst )) {
6172+ if (myvalid (core , dst )) {
61356173 r_anal_xrefs_set (core -> anal , cur , dst , R_ANAL_REF_TYPE_CODE | R_ANAL_REF_TYPE_EXEC );
61366174 }
61376175 }
@@ -6141,7 +6179,7 @@ R_API void r_core_anal_esil(RCore *core, const char *str /* len */, const char *
61416179 {
61426180 ut64 dst = op .jump ;
61436181 if (CHECKREF (dst ) || (target && dst == ntarget )) {
6144- if (myvalid (core -> io , dst )) {
6182+ if (myvalid (core , dst )) {
61456183 r_anal_xrefs_set (core -> anal , cur , dst , R_ANAL_REF_TYPE_CALL | R_ANAL_REF_TYPE_EXEC );
61466184 }
61476185 ESIL -> old = cur + op .size ;
@@ -6161,7 +6199,7 @@ R_API void r_core_anal_esil(RCore *core, const char *str /* len */, const char *
61616199 dst = r_reg_getv (core -> anal -> reg , pcname );
61626200 }
61636201 if (CHECKREF (dst )) {
6164- if (myvalid (core -> io , dst )) {
6202+ if (myvalid (core , dst )) {
61656203 RAnalRefType ref =
61666204 (op .type & R_ANAL_OP_TYPE_MASK ) == R_ANAL_OP_TYPE_UCALL
61676205 ? R_ANAL_REF_TYPE_CALL
0 commit comments