当前位置: 首页>>代码示例>>C++>>正文


C++ FunctionNode::Insert方法代码示例

本文整理汇总了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);
		}
	}
}
开发者ID:godthem90,项目名称:Mac_Security_S4,代码行数:51,代码来源:disasm3.cpp


注:本文中的FunctionNode::Insert方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。