exp_block *FindAddrBlock( imp_image_handle *ii, addr_ptr addr ) { exp_block *b; for( b = ii->addr; b != NULL; b = b->next ) { if( SameAddrSpace( b->start, addr ) && b->start.offset <= addr.offset && (b->start.offset+b->len) > addr.offset ) { return( b ); } } return( NULL ); }
search_result DIPENTRY DIPImpAddrSym( imp_image_handle *ii, imp_mod_handle im, address a, imp_sym_handle *is ) { msym_sym *s; im = im; is->p = NULL; s = ii->gbl; for( ;; ) { if( s == NULL ) break; if( SameAddrSpace( s->addr, a.mach ) && s->addr.offset <= a.mach.offset ) { if( is->p == NULL || is->p->addr.offset < s->addr.offset ) { is->p = s; } if( is->p->addr.offset == a.mach.offset ) return( SR_EXACT ); } s = s->next; } if( is->p != NULL ) return( SR_CLOSEST ); return( SR_NONE ); }