//遍历一个函数在程序中的所有交叉引用 // #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); } } } } 结果如下:
遍历一个函数在程序中的所有交叉引用
时间: 2024-10-07 08:50:37