long AddrDiff( address a, address b ) { AddrFix( &a ); AddrFix( &b ); DeAlias( &a.mach ); DeAlias( &b.mach ); return( MADAddrDiff( &a, &b, MAF_FULL ) ); }
/* * GetSymbolName */ bool GetSymbolName( address *addr, char *name, DWORD *symoff ) { sym_handle *symhdl; search_result sr; location_list ll; symhdl = MemAlloc( DIPHandleSize( HK_SYM ) ); sr = DIPAddrSym( NO_MOD, *addr, symhdl ); switch( sr ) { case SR_CLOSEST: DIPSymLocation( symhdl, NULL, &ll ); *symoff = MADAddrDiff( addr,&(ll.e[0].u.addr), MAF_FULL ); break; case SR_EXACT: *symoff = 0; break; case SR_NONE: MemFree( symhdl ); return( false ); } DIPSymName( symhdl, NULL, SNT_OBJECT, name, MAX_SYM_NAME ); MemFree( symhdl ); return( true ); }