示例#1
0
long AddrDiff( address a, address b )
{
    AddrFix( &a );
    AddrFix( &b );
    DeAlias( &a.mach );
    DeAlias( &b.mach );
    return( MADAddrDiff( &a, &b, MAF_FULL ) );
}
示例#2
0
/*
 * 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 );
}