首页 > 代码库 > 遍历一个函数在程序中的所有交叉引用

遍历一个函数在程序中的所有交叉引用

//遍历一个函数在程序中的所有交叉引用//#include <idc.idc>static main(){	list_callers("_memset");	list_callers("_sprintf");}static list_callers(bad_func){	auto func,addr,xref,source;	func = LocByName(bad_func);	//通过函数名查找函数的地址	Message("func addr is : 0x%x ",func);	if(func == BADADDR)	{		Warning("Sorry,%s not found in database",bad_func);	}	else	{		//RfirstB是获取第一个从它开始的代码引用(就是调用了这个函数的地址)		for(addr = RfirstB(func); addr != BADADDR ; addr = RnextB(func,addr))		{			xref = XrefType();		//获取交叉类型			if(xref == fl_CN || xref == fl_CF)			{				source = GetFunctionName(addr);	//获取这个地址所在的是那一个函数里				Message("%s is called from 0x%x in %s\n",bad_func,addr,source);			}		}	}}

结果如下: