枚举一个函数里的所有调用

//枚举一个函数里的所有调用
//
#include <idc.idc>
static main()
{
	auto func,end,target,inst,name,flags,xref;
	flags = SEARCH_DOWN | SEARCH_NEXT;
	func = GetFunctionAttr(ScreenEA(),FUNCATTR_START);
	if(func != -1)
	{
		name = Name(func);
		end = GetFunctionAttr(func,FUNCATTR_END);
		for(inst = func; inst < end; inst = FindCode(inst,flags))
		{
			for(target = Rfirst(inst) ; target != BADADDR; target = Rnext(inst,target))	//Rfirst取得第一个对它的代码的调用
			{
				xref = XrefType();	//这个程序中只是对调用其它函数的交叉引用感兴趣,所以只关注fl_CN和fl_CF类型的交叉引用
				if(xref == fl_CN || xref == fl_CF)
				{
					Message("%s calls %s from 0x%x\n",name,Name(target),inst);
				}
			}
		}
	}
	else
	{
		Warning("No function found at location %x",ScreenEA());
	}
}

结果如下:
 
 

  

转载于:https://www.cnblogs.com/M-Mr/p/3926372.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值