@@ -680,7 +680,9 @@ R_API bool r_esil_reg_read(REsil *esil, const char *regname, ut64 *val, ut32 *si
680680 }
681681 do {
682682 REsilVoyeur * voy = r_id_storage_get (& esil -> voyeur [R_ESIL_VOYEUR_REG_READ ], i );
683- voy -> reg_read (voy -> user , regname , * val );
683+ if (val ) {
684+ voy -> reg_read (voy -> user , regname , * val );
685+ }
684686 } while (r_id_storage_get_next (& esil -> voyeur [R_ESIL_VOYEUR_REG_READ ], & i ));
685687 return true;
686688#else
@@ -691,7 +693,7 @@ R_API bool r_esil_reg_read(REsil *esil, const char *regname, ut64 *val, ut32 *si
691693 val = & localnum ;
692694 }
693695 * val = 0LL ;
694- if (size ) {
696+ if (size && esil -> anal && esil -> anal -> config ) {
695697 * size = esil -> anal -> config -> bits ;
696698 }
697699 if (esil -> cb .hook_reg_read ) {
@@ -706,12 +708,16 @@ R_API bool r_esil_reg_read(REsil *esil, const char *regname, ut64 *val, ut32 *si
706708
707709R_API bool r_esil_reg_read_silent (REsil * esil , const char * name , ut64 * val , ut32 * size ) {
708710 R_RETURN_VAL_IF_FAIL (esil && esil -> reg_if .reg_read && name , false);
709- if (!esil -> reg_if .reg_read (esil -> reg_if .reg , name , val )) {
710- return false;
711- }
712711 if (esil -> reg_if .reg_size && size ) {
713712 * size = esil -> reg_if .reg_size (esil -> reg_if .reg , name );
714713 }
714+ if (val ) {
715+ if (!esil -> reg_if .reg_read (esil -> reg_if .reg , name , val )) {
716+ return false;
717+ }
718+ } else {
719+ return esil -> reg_if .is_reg (esil -> reg_if .reg , name );
720+ }
715721 return true;
716722}
717723
0 commit comments