/* #<pydoc> def get_fchunk_referer(ea, idx): pass #</pydoc> */ static ea_t get_fchunk_referer(ea_t ea, size_t idx) { func_t *pfn = get_fchunk(ea); func_parent_iterator_t dummy(pfn); // read referer info if ( idx >= pfn->refqty || pfn->referers == NULL ) return BADADDR; else return pfn->referers[idx]; }
//---------------------------------------------------------------------- bool jump_pattern_t::match(ea_t ea) { // unfortunately we can not do this in the constructor check[0x00] = &jump_pattern_t::jpi0; check[0x01] = &jump_pattern_t::jpi1; check[0x02] = &jump_pattern_t::jpi2; check[0x03] = &jump_pattern_t::jpi3; check[0x04] = &jump_pattern_t::jpi4; check[0x05] = &jump_pattern_t::jpi5; check[0x06] = &jump_pattern_t::jpi6; check[0x07] = &jump_pattern_t::jpi7; check[0x08] = &jump_pattern_t::jpi8; check[0x09] = &jump_pattern_t::jpi9; check[0x0a] = &jump_pattern_t::jpia; check[0x0b] = &jump_pattern_t::jpib; check[0x0c] = &jump_pattern_t::jpic; check[0x0d] = &jump_pattern_t::jpid; check[0x0e] = &jump_pattern_t::jpie; check[0x0f] = &jump_pattern_t::jpif; memset(skip, 0, sizeof(skip)); memset(eas, -1, sizeof(eas)); memset(r, -1, sizeof(r)); eas[0] = ea; failed = false; func_t *pfn = get_fchunk(ea); if ( pfn == NULL ) pfn = get_prev_fchunk(ea); minea = pfn != NULL ? pfn->startEA : getseg(ea)->startEA; if ( !(this->*check[0])() ) return false; while ( *roots ) { memset(spoiled, 0, sizeof(spoiled)); if ( !follow_tree(eas[0], *roots++) || failed ) return false; } ea_t start = eas[0]; for ( int i=1; i < qnumber(eas); i++ ) start = qmin(start, eas[i]); si.startea = start; return !failed; }