#include static decode_xtype(xtype) { if (xtype & XREF_USER) { Message("XREF_USER "); xtype = xtype & ~XREF_USER; } if (xtype == fl_CF) Message("fl_CF Call Far"); else if (xtype == fl_CN) Message("fl_CN Call Near"); else if (xtype == fl_JF) Message("fl_JF Jump Far"); else if (xtype == fl_JN) Message("fl_JN Jump Near"); else if (xtype == fl_F) Message("fl_F Ordinary flow"); else if (xtype == dr_O) Message("dr_O Offset"); else if (xtype == dr_W) Message("dr_W Write"); else if (xtype == dr_R) Message("dr_R Read" ); else if (xtype == dr_T) Message("dr_T Text (names in manual operands)"); else if (xtype == dr_I) Message("dr_I Informational"); } static lookup_from_ref(void) { auto from, current_code, current_data, no_cxrefs, no_dxrefs; from = ScreenEA(); no_cxrefs = 0; no_dxrefs = 0; Message("%x [from] xrefs\n", from); current_code = Rfirst0(from); while(current_code != BADADDR) { no_cxrefs++; Message(" %x CODE (0x%x) ",current_code, XrefType()); decode_xtype(XrefType()); Message("\n"); current_code = Rnext0(from, current_code); } current_data = Dfirst(from); while(current_data != BADADDR) { no_cxrefs++; Message(" %x DATA (0x%x) ",current_data, XrefType()); decode_xtype(XrefType()); Message("\n"); current_data = Dnext(from, current_data); } if ((no_cxrefs + no_dxrefs) == 0) Message(" NONE\n"); } static lookup_to_ref(void) { auto to, current_code, current_data, no_cxrefs, no_dxrefs; to = ScreenEA(); no_cxrefs = 0; no_dxrefs = 0; Message("%x [to] xrefs\n", to); current_code = RfirstB0(to); while(current_code != BADADDR) { no_cxrefs++; Message(" %x CODE (0x%x) ",current_code, XrefType()); decode_xtype(XrefType()); Message("\n"); current_code = RnextB0(to, current_code); if (current_code != BADADDR && no_cxrefs > 7) { Message(" TOO MANY (%d) CODE xrefs ...\n", no_cxrefs); current_code = BADADDR; } } current_data = DfirstB(to); while(current_data != BADADDR) { no_dxrefs++; Message(" %x DATA (0x%x) ",current_data, XrefType()); decode_xtype(XrefType()); Message("\n"); current_data = DnextB(to, current_data); if (current_data != BADADDR && no_dxrefs > 7) { Message(" TOO MANY (%d) DARA xrefs ...\n", no_dxrefs); current_data = BADADDR; } } if ((no_cxrefs + no_dxrefs) == 0) Message(" NONE\n"); } static main(void) { AddHotkey("Alt-F7", "lookup_to_ref"); AddHotkey("Alt-F8", "lookup_from_ref"); }