int AddrCmp( address *addr1, address *addr2 ) /*******************************************/ { if( addr1->sect_id > addr2->sect_id ) return( +1 ); if( addr1->sect_id < addr2->sect_id ) return( -1 ); return( MADAddrComp( addr1, addr2, MAF_FULL ) ); }
int AddrComp( address a, address b ) { if( a.sect_id == 0 ) a.sect_id = b.sect_id; if( b.sect_id == 0 ) b.sect_id = a.sect_id; if( a.sect_id > b.sect_id ) { return( 3 ); } else if( a.sect_id < b.sect_id ) { return( -3 ); } else { if( _IsOn( SW_IGNORE_SEGMENTS ) ) { return( MADAddrComp( &a, &b, MAF_OFFSET ) ); } else { AddrFix( &a ); AddrFix( &b ); DeAlias( &a.mach ); DeAlias( &b.mach ); return( MADAddrComp( &a, &b, MAF_FULL ) ); } } }
/* * DisplayAsmLines - display all assembler lines * hwnd - dialog handle * paddr - address to start dissassembly */ static void DisplayAsmLines( HWND hwnd, address *paddr ) { int i; address addr; address flagaddr; char buff[256]; HWND hscrl; DWORD max; int curr; mad_registers *regs; addr = *paddr; regs = StatGetMadRegisters( hwnd ); GetCurrAddr( &flagaddr, regs ); for( i = STAT_DISASM_1;i <= STAT_DISASM_8; i++ ) { buff[0] = ' '; if( MADAddrComp( &addr, &flagaddr, MAF_FULL ) == 0 ) { buff[0] = '*'; } Disassemble( &addr, buff+1, FALSE, 255 ); SetDlgItemText( hwnd, i, buff ); } #ifdef __NT__ max = max; curr = curr; hscrl = GetDlgItem( hwnd, STAT_SCROLL ); SetScrollRange( hscrl, SB_CTL, 0, 2, FALSE ); SetScrollPos( hscrl, SB_CTL, 1, TRUE ); #else max = GetASelectorLimit( paddr->mach.segment ); if( max > MAXRANGE ) { curr = ( MAXRANGE * paddr->mach.offset ) / max; max = MAXRANGE; } else { curr = paddr->mach.offset; } hscrl = GetDlgItem( hwnd, STAT_SCROLL ); SetScrollRange( hscrl, SB_CTL, 0, max, FALSE); SetScrollPos( hscrl, SB_CTL, curr, TRUE ); #endif } /* DisplayAsmLines */
/* * logDisasm - log some disassembly */ static void logDisasm( ExceptDlgInfo *info ) { int i; address addr; address flagaddr; char str[256]; SetDisasmInfo( info->procinfo->prochdl, info->module ); GetCurrAddr( &flagaddr, info->regs ); addr = flagaddr; InstructionBackward( LogData.asm_bkup, &addr ); for( i = 0; i <= LogData.asm_cnt; i++ ) { if( MADAddrComp( &addr, &flagaddr, MAF_FULL ) == 0 ) { logStrPrintf( "--->" ); } else { logStrPrintf( " " ); } Disassemble( &addr, str, TRUE, 255 ); logStrPrintf( "%s\n", str ); } } /* logDisasm */