示例#1
0
size_t DisCliValueString( void *d, dis_dec_ins *ins, unsigned op, char *buff, size_t buff_size )
{
    mad_disasm_data     *dd = d;
    mad_type_info       mti;
    address             val;

    buff[0] = '\0';
    val = dd->addr;
    switch( ins->op[op].type & DO_MASK ) {
    case DO_RELATIVE:
        val.mach.offset += ins->op[op].value;
        //NYI: 64 bit
        MCAddrToString( val, MIPST_N32_PTR, MLK_CODE, buff, buff_size );
        break;
    case DO_ABSOLUTE:
        if( dd->ins.type == DI_MIPS_J || dd->ins.type == DI_MIPS_JAL ) {
            // Handle j/jal as having pointer operand to show target symbol
            val.mach.offset = ins->op[op].value;
            MCAddrToString( val, MIPST_N32_PTR, MLK_CODE, buff, buff_size );
            break;
        }
        // Fall through
    case DO_IMMED:
    case DO_MEMORY_ABS:
        MCTypeInfoForHost( MTK_INTEGER, SIGNTYPE_SIZE( sizeof( ins->op[0].value ) ), &mti );
        MCTypeToString( dd->radix, &mti, &ins->op[op].value, buff, &buff_size );
        break;
    }
    return( strlen( buff ) );
}
示例#2
0
size_t DisCliValueString( void *d, dis_dec_ins *ins, unsigned op, char *buff, size_t buff_size )
{
    mad_disasm_data     *dd = d;
    mad_type_info       mti;
    address             val;

    buff[0] = '\0';
    val = dd->addr;
    switch( ins->op[op].type & DO_MASK ) {
    case DO_RELATIVE:
        val.mach.offset += ins->op[op].value;
        //NYI: 64 bit
        MCAddrToString( val, PPCT_N32_PTR, MLK_CODE, buff, buff_size );
        break;
    case DO_IMMED:
    case DO_ABSOLUTE:
    case DO_MEMORY_ABS:
        MCTypeInfoForHost( MTK_INTEGER, SIGNTYPE_SIZE( sizeof( ins->op[0].value ) ), &mti );
        MCTypeToString( dd->radix, &mti, &ins->op[op].value, buff, &buff_size );
        break;
    }
    return( strlen( buff ) );
}
示例#3
0
char    *CnvLong( long value, char *buff, size_t buff_len )
{
    return( DoMadLongConv( buff, buff_len, value, CurrRadix, SIGNTYPE_SIZE( sizeof( value ) ) ) );
}