static void SetIp( HWND hwnd, address *addr ) { mad_type_info host; mad_type_info mti; void *item; char buf[BUF_SIZE]; unsigned max; max = BUF_SIZE - 1; MADTypeInfoForHost( MTK_ADDRESS, sizeof( address ), &host ); MADTypeInfo( MADTypeDefault( MTK_ADDRESS, MAF_FULL, NULL, addr ), &mti ); item = alloca( ( mti.b.bits / BITS_PER_BYTE ) + 1); MADTypeConvert( &host, addr, &mti, item, 0 ); MADTypeToString( 16, &mti, item, &max, buf ); SetDlgItemText( hwnd, INT_CS_IP, buf ); }
static void logStack( ExceptDlgInfo *info ) { unsigned_16 *data; int i; int j; address sp; DWORD linecnt; DWORD bytesread; mad_type_info host; mad_type_info mti; void *item; char buff[BUF_SIZE]; unsigned buff_len; unsigned word_size; #define MIN_SIZE sizeof( unsigned_16 ) MADRegSpecialGet( MSR_SP, info->regs, &( sp.mach ) ); MADTypeInfoForHost( MTK_ADDRESS, sizeof( address ), &host ); MADTypeInfo( MADTypeDefault( MTK_ADDRESS, MAF_FULL, NULL, &sp ), &mti ); item = alloca( BITS2BYTES( mti.b.bits ) + 1 ); #ifdef __AXP__ word_size = 8; #else word_size = 4; #endif data = alloca( word_size * 4 ); logPrintf( STR_STACK_DATA ); for( linecnt=0; linecnt < 20; linecnt ++ ) { bytesread = MADCliReadMem( sp, word_size * 4, data ); MADTypeConvert( &host, &sp, &mti, item, 0 ); buff_len = sizeof( buff ); MADTypeToString( 16, &mti, item, buff, &buff_len ); logStrPrintf( "%s - ", buff ); for( i = 0; i < bytesread / MIN_SIZE; i += word_size / MIN_SIZE ) { for( j = word_size / MIN_SIZE - 1; j >= 0; j-- ) { logStrPrintf( "%04hX", data[i+j]); } logStrPrintf( " " ); MADAddrAdd( &sp, word_size, MAF_FULL ); } logStrPrintf( "\n" ); } }
char *AddrToString( address *a, mad_address_format af, char *buff, size_t buff_len ) { return( AddrTypeToString( a, MADTypeDefault( MTK_ADDRESS, af, &DbgRegs->mr, a ), buff, buff_len ) ); }
char *AddrToIOString( address *a, char *buff, size_t buff_len ) { return( AddrTypeToString( a, MADTypeDefault( MAS_IO | MTK_ADDRESS, MAF_FULL, &DbgRegs->mr, a ), buff, buff_len ) ); }
/* * logFaultInfo */ static void logFaultInfo( ExceptDlgInfo *info ) { char *str; char buf[150]; char addr_buf[64]; char fname[ FNAME_BUFLEN ]; DWORD type; DWORD line; msg_id gptype; ProcStats stats; logStrPrintf( "\n" ); logPrintf( STR_OFFENDING_PROC_ULINE ); logPrintf( STR_OFFENDING_PROC_INFO ); logPrintf( STR_OFFENDING_PROC_ULINE ); while( !GetProcessInfo( info->procinfo->procid, &stats ) ) { Sleep( 100 ); RefreshInfo(); } logPrintf( STR_OFFENDING_PROC_X, stats.name, info->procinfo->procid ); type = info->dbinfo->u.Exception.ExceptionRecord.ExceptionCode; FormatException( buf, type ); MADCliAddrToString( info->init_ip, MADTypeDefault( MTK_ADDRESS, MAF_FULL, NULL, &( info->init_ip ) ), MLK_CODE, addr_buf, 63 ); logPrintf( STR_ERR_OCCURRED_AT_X_Y, buf, addr_buf ); if( type == EXCEPTION_ACCESS_VIOLATION ) { if( info->dbinfo->u.Exception.ExceptionRecord.ExceptionInformation[0] ) { gptype = STR_LOG_INV_WRITE_TO; } else { gptype = STR_LOG_INV_READ_FROM; } logPrintf( gptype, info->dbinfo->u.Exception.ExceptionRecord.ExceptionInformation[1] ); } str = SrchMsg( info->action, Actions, NULL ); if( str != NULL ) { logStrPrintf( "%s\n", str ); } logPrintf( STR_MODULES_LOADED ); logModules( info->procinfo->procid, INDENT ); logRegisters( info ); logPrintf( STR_SOURCE_INFORMATION ); if( info->got_dbginfo && GetLineNum( &info->init_ip, fname, FNAME_BUFLEN, &line ) ) { logPrintf( STR_LOG_LINE_X_OF_FILE, INDENT, "", line, fname ); } else { logPrintf( STR_LOG_N_A, INDENT, "" ); } logPrintf( STR_DISASSEMBLY ); logDisasm( info ); logStack( info ); #ifndef CHICAGO if( LogData.log_mem_manager ) { logMemManInfo( info->procinfo->procid ); } #endif if( LogData.log_mem_dmp ) { logMemDmp( info ); } }
mad_type_handle GetMADTypeHandleDefaultAt( address a, mad_type_kind mtk ) { return( MADTypeDefault( mtk, MAF_FULL, &DbgRegs->mr, &a ) ); }
OVL_EXTERN brkp *SetWatch( memory_expr def_seg ) { return( SetPoint( def_seg, MADTypeDefault( MTK_INTEGER, 0, &DbgRegs->mr, NULL ) ) ); }