Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CFG::CFG(func_t *func)
- {
- eavec_t eavec;
- eavec.push_back(func->startEA);
- while(!eavec.empty())
- {
- ea_t *front = eavec.front();
- ea_t working_ea = *front;
- eavec.erase(front);
- if(!Split(ea))
- {
- BasicBlock block;
- block.boundary.ea1 = block.boundary.ea2 = ea;
- bool bContinue = 1;
- do
- {
- flags_t flags = get_flags(ea);
- if(!isFlow(flags) && block.boundary.ea1 == ea)
- break;
- if(!isCode(flags))
- break;
- if(Split(ea))
- {
- Edge edge;
- edge.ea = ea;
- edge.type = 3;
- block.inedges.push_back(edge);
- break;
- }
- if(GetIncoming(ea, &eavec, &block))
- bContinue = 0;
- ea = get_item_end(ea);
- } while(!bContinue);
- } // end if(!Split(ea))
- m_Vector.push_back(block);
- } // end while(!eavec.empty())
- m_NumBlocks = m_Vector.size();
- for(int i = 0; i < m_NumBlocks; ++i)
- {
- for(int j = 0; j <= m_Vector[i].inedges.size(); ++j)
- {
- Edge e;
- e.ea = m_Vector[i].boundary.ea1;
- e.type = m_Vector[i].inedges[j].type;
- int idx = -1;
- for(int k = 0; k < m_NumBlocks; ++k)
- {
- if(m_Vector[k].boundary.ea1 == m_Vector[i].inedges[j].ea)
- {
- idx = k;
- break;
- }
- }
- // bug here, if idx = -1
- m_Vector[idx].outedges.push_back(e);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement