本文整理汇总了C++中FunctionNode::Insert方法的典型用法代码示例。如果您正苦于以下问题:C++ FunctionNode::Insert方法的具体用法?C++ FunctionNode::Insert怎么用?C++ FunctionNode::Insert使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类FunctionNode
的用法示例。
在下文中一共展示了FunctionNode::Insert方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ParseProgram
void CDisassembler::ParseProgram(Program *prog)
{
prog->EntryAddr = EntryAddr;
int functioni;
for( functioni = 1; functioni < FunctionList.GetNumEntries(); functioni++ )
{
int section = FunctionList[functioni].Section;
uint64_t func_start_offset = FunctionList[functioni].Start;
uint64_t func_end_offset = FunctionList[functioni].End;
uint64_t section_addr = Sections[section].SectionAddress;
if((Sections[section].Type & 0xFF) == 1)
{
FunctionNode func;
func.StartAddress = section_addr + func_start_offset;
func.EndAddress = section_addr + func_end_offset;
vector<Instruction> insns;
uint64_t start_addr, end_addr;
SetFunctionDescriptor(func.StartAddress);
while( GetBlockInFunction( &insns, &start_addr, &end_addr ) != -1 )
{
if(insns.size() == 0)
fprintf(stderr, "[error] can't get block assembly\n");
BlockNode node;
node.Init( insns, start_addr, end_addr );
func.Insert( node );
insns.clear();
}
//flow_graph1.PrintAllPath();
prog->Insert(func);
}
}
uint32_t sym_num = Symbols.GetNumEntries();
for(int i = 0; i < sym_num; i++)
{
if(Symbols[i].Name)
{
int section = Symbols[i].Section;
uint64_t section_addr = Sections[section].SectionAddress;
uint64_t sym_addr = section_addr + Symbols[i].Offset;
const char *sym_name = Symbols.GetName(i);
if(sym_name[0] != '?')
prog->AddSymbol(sym_addr, sym_name);
}
}
}