2323#define OT_FLAG R_ESIL_OP_TYPE_FLAG
2424#define OT_TRAP R_ESIL_OP_TYPE_TRAP
2525
26+ static ut64 reg_getv (REsil * esil , const char * name ) {
27+ ut64 v = UT64_MAX ;
28+ if (r_esil_reg_read (esil , name , & v , NULL )) {
29+ return v ;
30+ }
31+ return UT64_MAX ;
32+ }
33+
2634R_IPI bool alignCheck (REsil * esil , ut64 addr );
2735
2836/// XXX R2_600 - must be internal imho
@@ -125,13 +133,22 @@ static bool popRN(REsil *esil, ut64 *n) {
125133}
126134
127135static ut8 esil_internal_sizeof_reg (REsil * esil , const char * r ) {
136+ #if 0
128137 R_RETURN_VAL_IF_FAIL (esil && esil -> anal && esil -> anal -> reg && r , 0 );
129138 RRegItem * ri = r_reg_get (esil -> anal -> reg , r , -1 );
130139 if (ri ) {
131140 ut8 reg_size = ri -> size ; // why a reg size cant be > 256 bits?
132141 r_unref (ri );
133142 return reg_size ;
134143 }
144+ #else
145+ R_RETURN_VAL_IF_FAIL (esil && r , 0 );
146+ ut32 size = 0 ;
147+ ut64 val = 0 ; // XXX esil_reg_read cant take val as null
148+ if (r_esil_reg_read (esil , r , & val , & size )) {
149+ return size ;
150+ }
151+ #endif
135152 return 0 ;
136153}
137154
@@ -334,7 +351,7 @@ static bool esil_js(REsil *esil) {
334351}
335352
336353static bool esil_weak_eq (REsil * esil ) {
337- R_RETURN_VAL_IF_FAIL (esil && esil -> anal , false);
354+ R_RETURN_VAL_IF_FAIL (esil , false);
338355 char * dst = r_esil_pop (esil );
339356 char * src = r_esil_pop (esil );
340357
@@ -371,6 +388,7 @@ static bool esil_eq(REsil *esil) {
371388 }
372389 bool is128reg = false;
373390 bool ispacked = false;
391+ #if 0
374392 RRegItem * ri = r_reg_get (esil -> anal -> reg , dst , -1 );
375393 if (ri ) {
376394 is128reg = ri -> size == 128 ;
@@ -379,6 +397,9 @@ static bool esil_eq(REsil *esil) {
379397 } else {
380398 R_LOG_DEBUG ("esil_eq: %s is not a register" , dst );
381399 }
400+ #else
401+ // TODO: r_esil_reg can get regsize, but not the packed size
402+ #endif
382403 if (is128reg && esil -> stackptr > 0 ) {
383404 char * src2 = r_esil_pop (esil ); // pop the higher 64bit value
384405 ut64 n0 = r_num_get (NULL , src );
@@ -1543,6 +1564,8 @@ static bool esil_deceq(REsil *esil) {
15431564
15441565/* POKE */
15451566static bool esil_poke_n (REsil * esil , int bits ) {
1567+ R_RETURN_VAL_IF_FAIL (esil , false);
1568+ const bool be = (esil -> anal )? R_ARCH_CONFIG_IS_BIG_ENDIAN (esil -> anal -> config ): false;
15461569 ut64 bitmask = r_num_genmask (bits - 1 );
15471570 ut64 num , addr ;
15481571 ut8 b [8 ] = {0 };
@@ -1566,9 +1589,9 @@ static bool esil_poke_n(REsil *esil, int bits) {
15661589 size_t last = strlen (reg );
15671590 reg [last + 1 ] = 0 ;
15681591 reg [last ] = 'l' ;
1569- ut64 loow = r_reg_getv (esil -> anal -> reg , reg );
1592+ ut64 loow = reg_getv ( esil , reg ); // r_reg_getv (esil->anal->reg, reg);
15701593 reg [last ] = 'h' ;
1571- ut64 high = r_reg_getv (esil -> anal -> reg , reg );
1594+ ut64 high = reg_getv ( esil , reg ); // r_reg_getv (esil->anal->reg, reg);
15721595 ret = r_esil_mem_write (esil , addr , (const ut8 * )& loow , 8 );
15731596 ret = r_esil_mem_write (esil , addr + 8 , (const ut8 * )& high , 8 );
15741597#if 0
@@ -1592,12 +1615,12 @@ static bool esil_poke_n(REsil *esil, int bits) {
15921615 esil -> cb .hook_mem_read = NULL ;
15931616 r_esil_mem_read (esil , addr , b , bytes );
15941617 esil -> cb .hook_mem_read = oldhook ;
1595- n = r_read_ble64 (b , R_ARCH_CONFIG_IS_BIG_ENDIAN ( esil -> anal -> config ) );
1618+ n = r_read_ble64 (b , be );
15961619 esil -> old = n ;
15971620 esil -> cur = num ;
15981621 esil -> lastsz = bits ;
15991622 num = num & bitmask ;
1600- r_write_ble (b , num , R_ARCH_CONFIG_IS_BIG_ENDIAN ( esil -> anal -> config ) , bits );
1623+ r_write_ble (b , num , be , bits );
16011624 ret = r_esil_mem_write (esil , addr , b , bytes );
16021625 }
16031626 }
@@ -1683,7 +1706,7 @@ static bool esil_peek_n(REsil *esil, int bits) {
16831706 if (bits & 7 ) {
16841707 return false;
16851708 }
1686- bool be = R_ARCH_CONFIG_IS_BIG_ENDIAN (esil -> anal -> config );
1709+ bool be = ( esil -> anal )? R_ARCH_CONFIG_IS_BIG_ENDIAN (esil -> anal -> config ): false; // XXX esil cant determine endian without anal
16871710 bool ret = false;
16881711 char res [SDB_NUM_BUFSZ ];
16891712 ut64 addr ;
0 commit comments