in tools/ExeView/filllb.cpp [320:424]
BOOL FillLBWithEntryTable (HWND hWnd, PEXEINFO pExeInfo )
{
char szBuff[255];
LPSTR lp = (LPSTR)szBuff;
PSTR ptr;
WORD wIndex=1;
WORD wI;
BYTE bBundles;
BYTE bFlags;
#define ADDITEM() SendMessage( hWnd, LB_ADDSTRING, 0, (LPARAM)lp )
SendMessage( hWnd, WM_SETREDRAW, 0, 0L );
SendMessage( hWnd, LB_RESETCONTENT, 0, 0L );
lstrcpy( lp, "Entry Table" );
ADDITEM();
lstrcpy( lp, "" );
ADDITEM();
lstrcpy( lp, "Ordinal\tSegment# Offset Stack Words Flags" );
ADDITEM();
lstrcpy( lp, "---------------------------------------------------------------" );
ADDITEM();
ptr = pExeInfo->pEntryTable;
while (TRUE)
{
bBundles = (BYTE)*ptr++;
if (bBundles==0) // End of the table
break;
bFlags= (BYTE)*ptr++;
switch (bFlags)
{
case 0x00: // Placeholders
if (bBundles == 1)
wsprintf( lp, "%d\t Placeholder",
wIndex );
else
wsprintf( lp, "%d-%d\t Placeholders",
wIndex, wIndex + bBundles - 1 );
ADDITEM();
wIndex += bBundles;
break;
case 0xFF: // MOVEABLE segments
for (wI=0; wI<(WORD)bBundles; wI++)
{
PMENTRY pe = (PMENTRY)ptr;
WORD wS = ((WORD)pe->bFlags)>>2;
wsprintf( lp, "%d\t%#04x %#04x %#04x MOVEABLE ",
wIndex, pe->bSegNumber, pe->wSegOffset, wS );
if (pe->bFlags & EXPORTED)
lstrcat( lp, "EXPORTED " );
else
lstrcat( lp, " " );
if (pe->bFlags & SHAREDDATA)
lstrcat( lp, "SHARED_DATA" );
ADDITEM();
wIndex++;
ptr += sizeof( MENTRY );
}
break;
default: // FIXED Segments
for (wI=0; wI<(WORD)bBundles; wI++)
{
PFENTRY pe = (PFENTRY)ptr;
WORD wS = ((WORD)pe->bFlags)>>2;
wsprintf( lp, "%d\t%#04x %#04x %#04x FIXED ",
wIndex, bFlags, pe->wSegOffset, wS );
if (pe->bFlags & EXPORTED)
lstrcat( lp, "EXPORTED " );
else
lstrcat( lp, " " );
if (pe->bFlags & SHAREDDATA)
lstrcat( lp, "SHARED_DATA" );
ADDITEM();
wIndex++;
ptr += sizeof( FENTRY );
}
break;
}
}
SendMessage( hWnd, WM_SETREDRAW, 1, 0L );
InvalidateRect( hWnd, NULL, TRUE );
UpdateWindow( hWnd );
return TRUE;
} //*** FillLBWithEntryTable