Understanding 32-bit MAP files generated by the Linker. Last update 07/23/97 Understanding 32-bit MAP files ============================== Please see TI1320 for 16-bit map files. MAP files are files produced during the link phase of program development that show the location of all the different parts of an application including memory segments, variables, program code, the program stack, etc. Borland linkers are capable of producing four different kinds of .map files: Segments, Publics, Detailed and Dump. The different outputs are controlled by Linker Settings: from the menu in the integrated development environment, and by Command line parameters for the command-line compilers and the stand alone linker. The best way to understand map files is to produce minimal map files, examine them, add to them and see the changes brought about by additions. The map files discussed here were generated using TLink32. In Borland C++ 5.02 and C++Builder 1.0, an incremental linker ILink32, was included. The map files are virtually identical and the components are the same. Some fields may be positioned or titled slightly different, however. The Segment Map File ==================== The Segment Map File shows the program's various Segments, their locations, their sizes, and their classes. The following two line program can be used to produce a minimal map file. void main(void) { } The command-line linker, TLINK32.EXE generates the following map file by default. Note that the /x option causes TLINK32 to not produce any map file. The following is a sample Segment Map file produced by the preceding minimal two line program. ================================================================== Start Length Name Class 0001:00000000 000008D88H _TEXT CODE 0002:00000000 000002250H _DATA DATA 0002:00002250 000000000H _TLSCBA TLSCBA 0002:00002250 000000048H _INIT_ INITDATA 0002:00002298 000000000H _INITEND_ INITDATA 0002:00002298 000000024H _EXIT_ EXITDATA 0002:000022BC 000000000H _EXITEND_ EXITDATA 0002:000022BC 000000000H CONST CONST 0002:000022BC 0000004D4H _BSS BSS 0002:00002790 000000000H _BSSEND BSS 0003:00000000 0000000B0H _TLS TLS 0003:000000B0 000000000H _TLSEND TLS ================================================================== As you can see a lot of segments were created for a two line program. Actually, only one segments were created for the program itself: _TEXT. The rest were created by the start up code c0x32.obj. In fact, if you just link the program above using, TLINK32 myprog you will get a map file with only the _TEXT segment defined. The 4 byte address to the right of the colon in the 'Start' field refer to the position in the virtual address space where the segment begins. The first 2 bytes to the left of the colon in the Start field are either 0001, 0002, 0003 denoting, in general, code, data, or thread local data. The 'Length' field refers to the length of the segment. Sometimes the 'Length' field is larger then the actual amount of data/code declared for the segment because it is padded to allow it to end on a boundary, for example a WORD boundary. The 'Name' field is used to give a unique identifier to each segment while the 'Class' field is normally used to identify what kind of information is contained in the segment. ( NOTE: The 'Class' of a segment is usually assigned based on the contents/function of the segment. However, the 'Class' field is also intimately related to ordering of segments ). Since the order of segments is very important in an Executable, and 'Class' names dictate the placement of segments, the Borland Startup Code defines all the pertinent segment classes in the order expected so that they may serve as placeholders. This is why it is very important that the Linker always *sees* the Borland StartupCode ( c0x32.obj, c0w32.obj or c0d32.obj for Windows console .EXEs, GUI .EXE's and Windows DLLs respectively ) prior to reading any other .OBJs or .LIB files. Several of the segments/classes defined by the Borland StartupCode are actually included for compatibility with OBJs and LIBs produced by other programming tools. NOTE: Do not remove or insert segment definitions in the Borland StartupCode unless you're familiar with both the stack resizing performed by the StartupCode and the internals of the memory allocation helper functions of the Borland RunTime Library. The following table lists the various classes defined by the Borland startup code along with a description of the segment's main usage: CODE The CODE class is where the programs CODE resides. It is created from Assembler via the CODESEG directive. From C and C++ the actual program code will be put into CODE class segments. For example, adding the following line between the curly brackets of our two line minimal program will increase the size of the CODE segment class in the map file: int a = 12 + 15; _TEXT is the name for the primary Code Segment. DATA The DATA segment class is defined in Assembler by the segment directive DATASEG. It contains initialized data from all object modules and libraries. In C and C++, data can be put into DATA class segment through a global/static variable declaration. For example, the following line added to our minimal example program prior to the main procedure will increase the size of a DATA class segment. char szMyLine[80] = "Hi There"; CONST The CONST segment class is defined in Assembler by the segment directive CONST. It is used by some Assemblers and Compilers to designate a segment to house constant data ( i.e. readonly data ). This is another placeholder as the Borland C and C++ compilers do not store constants in this segment class. INITDATA The INITDATA segment class contains two named segment identifiers: _INIT_ and _INITEND_. The _INIT_ segment contains a table that the start-up code uses for initializations prior to executing the main() or WinMain() functions provided by the programmer. To add data to this segment declare a global or static instance of a class containing a constructor. The compiler will add an entry to the _INIT_ segment which will ensure that the class initialization takes place prior to the execution of main() or WinMain(). For an example of the above, declare a global instance of a class TWindow yourWindow; Also contained in the _INIT_ segment are entries for functions used in a '#pragma startup' statement. Similarly the compiler inserts an entry in the segment so that the specified function is called before the execution of main()/WinMain(). The _INITEND_ segment is a placeholder to mark the end of _INIT_. EXITDATA The EXITDATA segment class also contains two named segments _EXIT_ and _EXITEND_. It contains a table of functions that the start-up code calls after the execution of main()/WinMain() but prior to program termination. Being the conterpart of _INIT_, _EXIT_ contains entries for global/static objects' destructors and functions specified in a '#pragma exit' function. The _EXITEND_ segment is a placeholder for the end of the _EXIT_ segment ( aka Exit Table ). NOTE: If either the _INIT_ or _EXIT_ table is corrupted or if a constructor or 'pragma startup/exit' function misbehaves, an application may terminately prematurely ( i.e. prior to reaching main()/WinMain() ) or may exhibit unexpected behaviours after the program returns from main()/WinMain(). Furthermore, loading a application with a offending constructor or '#pragma startup' function, may cause the latter to terminate even before main()/WinMain() is reached ( Use the -l option with the Borland Debuggers to investigate cases where your application is terminating prior to executing main()/WinMain() ). BSS The BSS segment class also contains two named segments _BSS and _BSSEND. It is defined in Assembler by the UDATASEG directive. Segments of the BSS class contain uninitialized data. In C and C++ uninitialized data can be put into a BSS segment class by declaring global data. For example adding the following line to the minimum example prior to main will add to a BSS segment class. char myLine[80]; The _BSSEND segment is a placeholder for the end of the BSS segment area. ( NOTE: It is very important that _BSSEND *follows* _BSS since it is used as a marker of the initialization of uninitialized data to NULL at startup time ). TLS The TLS segment class also contains two named segments _TLS and _TLSEND the latter also being a place holder for the end of the _TLS segment. The TLS segment class holds thread local storage. To add to the TLS segment class, for example, add a global variable qualified with __thread, char __thread myLine[80]; The Publics Map File ==================== The second type of Map file that the Borland Compilers and Linker can produce is the Publics Map File. To produce a Publics Map file from the integrated development environment set Options|Linker|Settings|Map File to Publics. From the Command Line compiler use the -M qualifier. With the Stand Alone Linker use the /m qualifier. Our minimal example program produces the following Publics Map file. ======================================================================= Start Length Name Class 0001:00000000 000008D88H _TEXT CODE 0002:00000000 000002250H _DATA DATA 0002:00002250 000000000H _TLSCBA TLSCBA 0002:00002250 000000048H _INIT_ INITDATA 0002:00002298 000000000H _INITEND_ INITDATA 0002:00002298 000000024H _EXIT_ EXITDATA 0002:000022BC 000000000H _EXITEND_ EXITDATA 0002:000022BC 000000000H CONST CONST 0002:000022BC 0000004D4H _BSS BSS 0002:00002790 000000000H _BSSEND BSS 0003:00000000 0000000B0H _TLS TLS 0003:000000B0 000000000H _TLSEND TLS Address Publics by Name 0001:0000718C operator delete(void*) 0001:0000719C operator delete[](void*) 0001:00002E41 __tpdsc__[Bad_typeid] 0001:00002E5D __tpdsc__[Bad_cast] 0001:00002E79 __tpdsc__[typeinfo] 0001:00002E2A __tpdsc__[typeinfo*] 0001:00000833 invokeHnd() 0001:00000818 Idle jump() 0001:00000426 Idle set_terminate(void(*)()) 0001:00000506 Idle set_unexpected(void(*)()) 0001:000000F9 Idle System::::GetTls() __fastcall 0001:00000420 Idle terminate() 0001:00002858 Idle typeinfo::operator =(const typeinfo&) 0001:00002820 Idle typeinfo::typeinfo(const typeinfo&) 0001:00002860 Idle typeinfo::~typeinfo() 0001:0000287F Idle typeinfo::operator ==(const typeinfo&) const 0001:000028A2 Idle typeinfo::operator !=(const typeinfo&) const 0002:00000D2C typeinfo:: 0001:000028C2 Idle typeinfo::before(const typeinfo&) const 0001:0000290B Idle typeinfo::name() const 0001:00000500 Idle unexpected() 0001:000010D4 _CatchCleanup() 0001:00000F45 _ReThrowException(unsigned int,unsigned char*) 0001:00000F15 _ThrowExceptionLDTC(void*,void*,void*,void*, unsigned int,unsigned int,unsigned int, unsigned char*,void*) 0001:00002DB0 __adjustClassAdr(void*,tpid*,tpid*) 0001:00002BE0 Idle __DynamicCast(void*,void*,void*,void*,int) 0001:00002CFA Idle __DynamicCastVCLptr(void*,void*) __fastcall 0001:00002CC8 Idle __DynamicCastVCLref(void*,void*) __fastcall 0001:000005A0 Idle __GetPolymorphicDTC(void*,unsigned int) 0001:0000291C Idle __GetTypeInfo(void*,void*,void*,void*) 0001:00002448 @__InitExceptBlockLDTC 0001:000026ED __isCompatTypeID(tpid*,tpid*,int,tpid**) 0001:000024BB __isSameTypeID(tpid*,tpid*) 0001:00000698 __lockDebuggerData() 0001:00002814 Idle __ThrowExceptionName() 0001:000027FC Idle __ThrowFileName() 0001:00002808 Idle __ThrowLineNumber() 0001:00002484 __typeIDname(tpid*) 0001:000006C0 __unlockDebuggerData() 0001:00008260 _abort 0001:00007160 _calloc 0002:00001C08 _CLOCALE 0002:00001AFC _CMonetary 0002:00001B30 _CNumeric 0002:00001B46 _CTimeDate 0002:00002078 _errno 0001:000082CC _exit 0001:00002F8C _fflush 0001:0000319C _fputc 0001:0000315C _fputs 0001:000077B4 _free 0001:00008D24 _getdate 0001:00008D50 _gettime 0001:00004C80 Idle _iswalnum 0001:00004CAC _iswalpha 0001:00004C98 Idle _iswascii 0001:00004CC4 Idle _iswcntrl 0001:00004CD8 _iswdigit 0001:00004CEC Idle _iswgraph 0001:00004D04 Idle _iswlower 0001:00004D18 Idle _iswprint 0001:00004D30 Idle _iswpunct 0001:00004D44 _iswspace 0001:00004D58 Idle _iswupper 0001:00004D6C Idle _iswxdigit 0001:00000108 _main 0001:000078BC _malloc 0001:00004DE0 Idle _mblen 0001:00004F9C _mbstowcs 0001:00004E5C _mbtowc 0001:00000110 _memchr 0001:0000035C _memcmp 0001:00000130 _memcpy 0001:00000154 _memmove 0001:000001A0 _memset 0001:000032AC Idle _perror 0001:00008A08 _raise 0001:00007D50 _realloc 0001:000089A8 Idle _signal 0001:00003350 _sprintf 0001:00000244 _strcmp 0001:00000290 _strlen 0001:000002EC _strncat 0001:00003374 Idle _vsprintf 0001:000003E0 _wcscpy 0001:000003C8 _wcslen 0001:00005104 _wcstombs 0001:00004F28 _wctomb 0001:0000824C __abort 0001:00000000 Idle __acrtused 0001:00008544 __addarg 0001:00002F0C __allocbuf 0002:00002768 __argc 0002:00002730 Idle __argv 0002:0000217C __argv0 0001:00007F38 __assert 0002:000020F4 __atexitcnt 0002:000026B0 __atexittbl 0002:0000276C __C0argc 0002:00002770 __C0argv 0002:00002774 __C0environ 0001:000082FC Idle __cexit 0002:000017B8 __cfinfo_get 0002:000018F0 __chartype 0001:00008B44 __cleanup 0001:000054A8 __clear87 0001:000054BC __control87 0001:00008A90 __create_shmem 0001:000023F2 __CurrExcContext 0001:00005B9C __cvt_init 0001:00005ED0 __cvt_initw 0001:0000830C Idle __c_exit 0002:00000160 Idle __DebuggerHookData 0002:00001E28 __default87 0002:000022BC Idle __DestructorCountPtr 0002:0000274C __dll_table 0002:00002488 __doserrno 0002:000017C0 Idle __dosErrorToSV 0001:000040B0 __dup_handle 0002:0000273C __environ 0002:00002744 __envsize 0002:00002748 Idle __env_lock 0001:000080EC __ErrorExit 0001:00007FFC __ErrorMessage 0001:00008164 __ErrorMessageHelper 0001:000005BF __ExceptInit 0001:0000165C __ExceptionHandler 0002:0000015C Idle __ExceptVarsSize 0002:00002754 __ExcRegPtr 0002:00002780 __exe_table 0001:000082E4 __exit 0001:000084B4 Idle __exitargv 0002:000020F8 __exitbuf 0002:000020FC __exitfopen 0002:00002100 Idle __exitopen 0001:000007F0 Idle __exit_except 0001:00003448 Idle __exit_streams 0001:00007C28 Idle __expand 0001:00008684 __expandblock 0002:00002108 Idle __expandptr 0002:00002028 __firstHeap 0002:00001E6C Idle __floatconvert 0001:00004020 __flushall 0001:00003010 __flushout 0002:000012B8 __fmode 0002:000012BC __fmodeptr 0001:000054FC __fpreset 0002:00002034 __freeStart 0001:00004118 Idle __free_handle 0001:00007BB0 Idle __free_heaps 0001:00005514 __fuildq 0001:00005544 __fuistq 0001:00005568 __fxam 0001:00000046 Idle __GetExceptDLLinfo 0001:0000065A __GetExceptDLLinfoInternal 0001:00000053 Idle __getHInstance 0001:00004BE0 __getLocaleEra 0001:00004A2C Idle __getLocaleMonetaryInfo 0001:00004B80 Idle __getLocaleMonetaryNegFmt 0001:00004B8C __getLocaleNumericInfo 0001:000046F8 __getLocaleTimeInfo 0001:00004070 __get_handle 0001:00000F98 Idle __Global_unwind 0002:000022DC __HandlerPtr 0002:000023C0 __handles 0002:0000006B __hInstance 0002:00001E30 __huge_dble 0002:00001E2C Idle __huge_flt 0002:00001E38 __huge_ldble 0002:00001E58 Idle __indefinite 0001:00000804 __InitDefaultHander 0001:00003070 __initfmode 0001:000058A0 __initmatherr 0001:000070D8 Idle __initMBCSTable 0001:0000831C __initwild 0001:000007D8 Idle __init_except 0001:00008A98 __init_exit_proc 0001:000041D0 __init_handles 0001:00003398 __init_streams 0001:0000004B Idle __isDLL 0001:000070E8 __ismbcspace 0002:0000278C __isWindows 0002:00001FC4 Idle __kalpha 0002:00001FC6 Idle __kpunct 0002:0000202C Idle __lastHeap 0002:00002030 __linktable 0001:000052CB Idle __lldiv 0001:0000538C Idle __llmod 0001:000052A8 __llmul 0001:00005454 Idle __llshl 0001:00005470 Idle __llshr 0001:00005343 __lludiv 0001:00005406 __llumod 0001:0000548C Idle __llushr 0001:000015E0 __Local_unwind 0001:00005844 __matherr 0001:00005870 __matherrl 0002:00001E46 __max_dble 0002:00001E42 __max_flt 0002:00001E4E __max_ldble 0002:00002590 __mbcsCodePage 0002:0000248C __mbctype 0001:00007108 __mbsrchr 0002:0000207C Idle __messagefile 0001:00007DCC Idle __msize 0002:00001D5C __nextrealptr 0002:00001DC4 __nextrealwptr 0002:000011EC __nfile 0002:000017BC __notUmask 0002:00002018 Idle __nv_heap_size 0002:000011F0 __openfd 0002:00002760 __oscmd 0002:00002758 __osenv 0002:000026AC __ostype 0001:00007B98 Idle __phys_avail 0002:000022F8 __pidtab 0002:00001E70 __pmatherr 0002:00001E74 __pmatherrl 0001:00006E70 __pow10 0001:00005630 __qdiv10 0001:00005658 __qmul10 0002:00001D58 __realcvtptr 0002:00001DC0 __realcvtwptr 0001:000015F3 Idle __Return_unwind 0002:00002040 __rover 0001:0000438C __rtl_write 0001:000054F6 __scanrslt 0002:00001D64 __scanrsltptr 0001:000054F0 __scantod 0002:00001D60 __scantodptr 0002:00001DCC __scanwrsltptr 0002:00001DC8 __scanwtodptr 0001:000063B4 __scan_init 0001:00006898 __scan_initw 0001:00008320 Idle __setargv 0002:00002104 __setargv__ 0002:0000219C __setenvp__ 0001:0000078C Idle __setexc 0001:00002EC4 __SetExceptionHandler 0001:00006FE8 __setmbcp 0001:000007B8 Idle __SetUserHandler 0002:0000201C __smalloc_threshold 0001:00008BBC __startup 0002:00002788 Idle __stkbase 0002:000001D8 __stkchk 0002:00000D3C __streams 0002:000012C0 __sys_errlist 0002:00001384 __sys_nerr 0001:00008A80 __terminate 0002:00001E5C __tiny_ldble 0002:00000063 Idle __TLS_index 0002:00000067 Idle __TLS_index4 0002:00001E68 __turboFloat 0001:00004058 __umask 0001:000007A8 Idle __unsetexc 0001:00002ED9 __UnsetExceptionHandler 0001:000007CC Idle __unsetuserhandler 0001:00002F05 Idle __UnwindException 0002:000022E0 Idle __UserHandlerPtr 0002:00002020 Idle __virt_chunk_free 0002:00002024 Idle __virt_chunk_free2 0002:00002010 Idle __virt_chunk_size 0002:00002014 Idle __virt_chunk_size2 0001:00007E54 __virt_commit 0001:00007EA8 __virt_decommit 0002:0000200C Idle __virt_heap_size 0001:00007ECC __virt_release 0001:00007DE8 __virt_reserve 0002:00002778 __wC0argv 0002:0000277C __wC0environ 0001:0000022C __wmemset 0002:00002764 __woscmd 0002:0000275C __wosenv 0001:000043D4 Idle __write 0001:00003E4C __xfflush 0002:00002048 ___allocated 0001:0000044E ___call_terminate 0001:0000052E ___call_unexpected 0001:000043F0 ___close 0002:0000006F Idle ___CPPdebugHook 0002:00000078 Idle ___CPPexceptionList 0002:000001EC ___debuggerDisableTerminateCallback 0002:00000088 Idle ___debuggerHookDataP 0002:00000080 Idle ___debuggerHookFN 0002:00000084 Idle ___debuggerWatchingP 0001:000006CC ___DefHandler 0001:0000081E ___doGlobalUnwind 0001:00004358 ___DOSerror 0001:00007F98 Idle ___errno 0001:000080DC Idle ___ErrorMessage 0002:0000007C Idle ___exceptFlags 0002:000000A4 Idle ___exceptMemAllocVars 0002:000000A0 Idle ___exceptStaticBuffP 0002:000000A8 Idle ___ExceptStaticXbuff 0001:00003080 ___fputn 0001:0000557C ___int64toa 0001:00004314 ___IOerror 0001:0000443C ___isatty 0001:0000446C ___isatty_osfhandle 0002:00000058 ___isDLL 0002:00000062 ___isGUI 0001:00004D84 ___iswctype 0001:0000083C Idle ___JumpToCatch__ 0001:000056B8 ___ldtrunc 0002:00001C34 ___locale 0001:000057B4 ___longtoa 0001:00004484 ___lseek 0001:000054EA ___nextreal 0001:00004378 ___NTerror 0001:000044FC ___open 0001:00007160 Idle ___org_calloc 0001:0000718C Idle ___org_delete 0001:0000719C Idle ___org_deletea 0001:00002F8C Idle ___org_fflush 0001:0000319C Idle ___org_fputc 0001:0000315C Idle ___org_fputs 0001:000077B4 Idle ___org_free 0001:00008D24 Idle ___org_getdate 0001:00008D50 Idle ___org_gettime 0001:000078BC ___org_malloc 0001:00004DE0 Idle ___org_mblen 0001:00004F9C Idle ___org_mbstowcs 0001:00004E5C Idle ___org_mbtowc 0001:00000110 Idle ___org_memchr 0001:0000035C Idle ___org_memcmp 0001:00000130 Idle ___org_memcpy 0001:00000154 Idle ___org_memmove 0001:000001A0 Idle ___org_memset 0001:000032AC Idle ___org_perror 0001:00008A08 Idle ___org_raise 0001:00007D50 Idle ___org_realloc 0001:00003350 Idle ___org_sprintf 0001:00000244 Idle ___org_strcmp 0001:00000290 Idle ___org_strlen 0001:000002EC Idle ___org_strncat 0001:00003374 Idle ___org_vsprintf 0001:00005104 Idle ___org_wcstombs 0001:00004F28 Idle ___org_wctomb 0001:00007C28 Idle ___org__expand 0001:00005844 Idle ___org__matherr 0001:00005870 Idle ___org__matherrl 0001:00007DCC Idle ___org__msize 0001:0000438C Idle ___org__rtl_write 0001:000043D4 Idle ___org__write 0001:000054E4 ___realcvt 0001:000000F9 ___System__GetTls 0002:0000008C Idle ___terminatePTR 0002:0000009C Idle ___throwExceptionName 0002:00000094 Idle ___throwFileName 0002:00000098 Idle ___throwLineNumber 0002:00000090 Idle ___unexpectdPTR 0002:00000061 Idle ___useDynamicTLS 0001:00005828 ___utoa 0001:00003524 ___vprinter 0001:00003F2C ___write 0001:000068B0 ___xcvt 0001:00006B80 ___xcvtw 0003:00000000 ___xxInfo Address Publics by Value 0001:00000000 Idle __acrtused 0001:00000046 Idle __GetExceptDLLinfo 0001:0000004B Idle __isDLL 0001:00000053 Idle __getHInstance 0001:000000F9 Idle System::::GetTls() __fastcall 0001:000000F9 ___System__GetTls 0001:00000108 _main 0001:00000110 _memchr 0001:00000110 Idle ___org_memchr 0001:00000130 Idle ___org_memcpy 0001:00000130 _memcpy 0001:00000154 Idle ___org_memmove 0001:00000154 _memmove 0001:000001A0 _memset 0001:000001A0 Idle ___org_memset 0001:0000022C __wmemset 0001:00000244 _strcmp 0001:00000244 Idle ___org_strcmp 0001:00000290 Idle ___org_strlen 0001:00000290 _strlen 0001:000002EC Idle ___org_strncat 0001:000002EC _strncat 0001:0000035C Idle ___org_memcmp 0001:0000035C _memcmp 0001:000003C8 _wcslen 0001:000003E0 _wcscpy 0001:00000420 Idle terminate() 0001:00000426 Idle set_terminate(void(*)()) 0001:0000044E ___call_terminate 0001:00000500 Idle unexpected() 0001:00000506 Idle set_unexpected(void(*)()) 0001:0000052E ___call_unexpected 0001:000005A0 Idle __GetPolymorphicDTC(void*,unsigned int) 0001:000005BF __ExceptInit 0001:0000065A __GetExceptDLLinfoInternal 0001:00000698 __lockDebuggerData() 0001:000006C0 __unlockDebuggerData() 0001:000006CC ___DefHandler 0001:0000078C Idle __setexc 0001:000007A8 Idle __unsetexc 0001:000007B8 Idle __SetUserHandler 0001:000007CC Idle __unsetuserhandler 0001:000007D8 Idle __init_except 0001:000007F0 Idle __exit_except 0001:00000804 __InitDefaultHander 0001:00000818 Idle jump() 0001:0000081E ___doGlobalUnwind 0001:00000833 invokeHnd() 0001:0000083C Idle ___JumpToCatch__ 0001:00000F15 _ThrowExceptionLDTC(void*,void*, void*,void*,unsigned int, unsigned int, unsigned int,unsigned char*,void*) 0001:00000F45 _ReThrowException(unsigned int,unsigned char*) 0001:00000F98 Idle __Global_unwind 0001:000010D4 _CatchCleanup() 0001:000015E0 __Local_unwind 0001:000015F3 Idle __Return_unwind 0001:0000165C __ExceptionHandler 0001:000023F2 __CurrExcContext 0001:00002448 @__InitExceptBlockLDTC 0001:00002484 __typeIDname(tpid*) 0001:000024BB __isSameTypeID(tpid*,tpid*) 0001:000026ED __isCompatTypeID(tpid*,tpid*,int,tpid**) 0001:000027FC Idle __ThrowFileName() 0001:00002808 Idle __ThrowLineNumber() 0001:00002814 Idle __ThrowExceptionName() 0001:00002820 Idle typeinfo::typeinfo(const typeinfo&) 0001:00002858 Idle typeinfo::operator =(const typeinfo&) 0001:00002860 Idle typeinfo::~typeinfo() 0001:0000287F Idle typeinfo::operator ==(const typeinfo&) const 0001:000028A2 Idle typeinfo::operator !=(const typeinfo&) const 0001:000028C2 Idle typeinfo::before(const typeinfo&) const 0001:0000290B Idle typeinfo::name() const 0001:0000291C Idle __GetTypeInfo(void*,void*,void*,void*) 0001:00002BE0 Idle __DynamicCast(void*,void*,void*,void*,int) 0001:00002CC8 Idle __DynamicCastVCLref(void*,void*) __fastcall 0001:00002CFA Idle __DynamicCastVCLptr(void*,void*) __fastcall 0001:00002DB0 __adjustClassAdr(void*,tpid*,tpid*) 0001:00002E2A __tpdsc__[typeinfo*] 0001:00002E41 __tpdsc__[Bad_typeid] 0001:00002E5D __tpdsc__[Bad_cast] 0001:00002E79 __tpdsc__[typeinfo] 0001:00002EC4 __SetExceptionHandler 0001:00002ED9 __UnsetExceptionHandler 0001:00002F05 Idle __UnwindException 0001:00002F0C __allocbuf 0001:00002F8C _fflush 0001:00002F8C Idle ___org_fflush 0001:00003010 __flushout 0001:00003070 __initfmode 0001:00003080 ___fputn 0001:0000315C _fputs 0001:0000315C Idle ___org_fputs 0001:0000319C _fputc 0001:0000319C Idle ___org_fputc 0001:000032AC Idle ___org_perror 0001:000032AC Idle _perror 0001:00003350 _sprintf 0001:00003350 Idle ___org_sprintf 0001:00003374 Idle ___org_vsprintf 0001:00003374 Idle _vsprintf 0001:00003398 __init_streams 0001:00003448 Idle __exit_streams 0001:00003524 ___vprinter 0001:00003E4C __xfflush 0001:00003F2C ___write 0001:00004020 __flushall 0001:00004058 __umask 0001:00004070 __get_handle 0001:000040B0 __dup_handle 0001:00004118 Idle __free_handle 0001:000041D0 __init_handles 0001:00004314 ___IOerror 0001:00004358 ___DOSerror 0001:00004378 ___NTerror 0001:0000438C Idle ___org__rtl_write 0001:0000438C __rtl_write 0001:000043D4 Idle ___org__write 0001:000043D4 Idle __write 0001:000043F0 ___close 0001:0000443C ___isatty 0001:0000446C ___isatty_osfhandle 0001:00004484 ___lseek 0001:000044FC ___open 0001:000046F8 __getLocaleTimeInfo 0001:00004A2C Idle __getLocaleMonetaryInfo 0001:00004B80 Idle __getLocaleMonetaryNegFmt 0001:00004B8C __getLocaleNumericInfo 0001:00004BE0 __getLocaleEra 0001:00004C80 Idle _iswalnum 0001:00004C98 Idle _iswascii 0001:00004CAC _iswalpha 0001:00004CC4 Idle _iswcntrl 0001:00004CD8 _iswdigit 0001:00004CEC Idle _iswgraph 0001:00004D04 Idle _iswlower 0001:00004D18 Idle _iswprint 0001:00004D30 Idle _iswpunct 0001:00004D44 _iswspace 0001:00004D58 Idle _iswupper 0001:00004D6C Idle _iswxdigit 0001:00004D84 ___iswctype 0001:00004DE0 Idle ___org_mblen 0001:00004DE0 Idle _mblen 0001:00004E5C Idle ___org_mbtowc 0001:00004E5C _mbtowc 0001:00004F28 Idle ___org_wctomb 0001:00004F28 _wctomb 0001:00004F9C Idle ___org_mbstowcs 0001:00004F9C _mbstowcs 0001:00005104 Idle ___org_wcstombs 0001:00005104 _wcstombs 0001:000052A8 __llmul 0001:000052CB Idle __lldiv 0001:00005343 __lludiv 0001:0000538C Idle __llmod 0001:00005406 __llumod 0001:00005454 Idle __llshl 0001:00005470 Idle __llshr 0001:0000548C Idle __llushr 0001:000054A8 __clear87 0001:000054BC __control87 0001:000054E4 ___realcvt 0001:000054EA ___nextreal 0001:000054F0 __scantod 0001:000054F6 __scanrslt 0001:000054FC __fpreset 0001:00005514 __fuildq 0001:00005544 __fuistq 0001:00005568 __fxam 0001:0000557C ___int64toa 0001:00005630 __qdiv10 0001:00005658 __qmul10 0001:000056B8 ___ldtrunc 0001:000057B4 ___longtoa 0001:00005828 ___utoa 0001:00005844 __matherr 0001:00005844 Idle ___org__matherr 0001:00005870 __matherrl 0001:00005870 Idle ___org__matherrl 0001:000058A0 __initmatherr 0001:00005B9C __cvt_init 0001:00005ED0 __cvt_initw 0001:000063B4 __scan_init 0001:00006898 __scan_initw 0001:000068B0 ___xcvt 0001:00006B80 ___xcvtw 0001:00006E70 __pow10 0001:00006FE8 __setmbcp 0001:000070D8 Idle __initMBCSTable 0001:000070E8 __ismbcspace 0001:00007108 __mbsrchr 0001:00007160 _calloc 0001:00007160 Idle ___org_calloc 0001:0000718C operator delete(void*) 0001:0000718C Idle ___org_delete 0001:0000719C operator delete[](void*) 0001:0000719C Idle ___org_deletea 0001:000077B4 _free 0001:000077B4 Idle ___org_free 0001:000078BC ___org_malloc 0001:000078BC _malloc 0001:00007B98 Idle __phys_avail 0001:00007BB0 Idle __free_heaps 0001:00007C28 Idle ___org__expand 0001:00007C28 Idle __expand 0001:00007D50 Idle ___org_realloc 0001:00007D50 _realloc 0001:00007DCC Idle __msize 0001:00007DCC Idle ___org__msize 0001:00007DE8 __virt_reserve 0001:00007E54 __virt_commit 0001:00007EA8 __virt_decommit 0001:00007ECC __virt_release 0001:00007F38 __assert 0001:00007F98 Idle ___errno 0001:00007FFC __ErrorMessage 0001:000080DC Idle ___ErrorMessage 0001:000080EC __ErrorExit 0001:00008164 __ErrorMessageHelper 0001:0000824C __abort 0001:00008260 _abort 0001:000082CC _exit 0001:000082E4 __exit 0001:000082FC Idle __cexit 0001:0000830C Idle __c_exit 0001:0000831C __initwild 0001:00008320 Idle __setargv 0001:000084B4 Idle __exitargv 0001:00008544 __addarg 0001:00008684 __expandblock 0001:000089A8 Idle _signal 0001:00008A08 Idle ___org_raise 0001:00008A08 _raise 0001:00008A80 __terminate 0001:00008A90 __create_shmem 0001:00008A98 __init_exit_proc 0001:00008B44 __cleanup 0001:00008BBC __startup 0001:00008D24 _getdate 0001:00008D24 Idle ___org_getdate 0001:00008D50 _gettime 0001:00008D50 Idle ___org_gettime 0002:00000058 ___isDLL 0002:00000061 Idle ___useDynamicTLS 0002:00000062 ___isGUI 0002:00000063 Idle __TLS_index 0002:00000067 Idle __TLS_index4 0002:0000006B __hInstance 0002:0000006F Idle ___CPPdebugHook 0002:00000078 Idle ___CPPexceptionList 0002:0000007C Idle ___exceptFlags 0002:00000080 Idle ___debuggerHookFN 0002:00000084 Idle ___debuggerWatchingP 0002:00000088 Idle ___debuggerHookDataP 0002:0000008C Idle ___terminatePTR 0002:00000090 Idle ___unexpectdPTR 0002:00000094 Idle ___throwFileName 0002:00000098 Idle ___throwLineNumber 0002:0000009C Idle ___throwExceptionName 0002:000000A0 Idle ___exceptStaticBuffP 0002:000000A4 Idle ___exceptMemAllocVars 0002:000000A8 Idle ___ExceptStaticXbuff 0002:0000015C Idle __ExceptVarsSize 0002:00000160 Idle __DebuggerHookData 0002:000001D8 __stkchk 0002:000001EC ___debuggerDisableTerminateCallback 0002:00000D2C typeinfo:: 0002:00000D3C __streams 0002:000011EC __nfile 0002:000011F0 __openfd 0002:000012B8 __fmode 0002:000012BC __fmodeptr 0002:000012C0 __sys_errlist 0002:00001384 __sys_nerr 0002:000017B8 __cfinfo_get 0002:000017BC __notUmask 0002:000017C0 Idle __dosErrorToSV 0002:000018F0 __chartype 0002:00001AFC _CMonetary 0002:00001B30 _CNumeric 0002:00001B46 _CTimeDate 0002:00001C08 _CLOCALE 0002:00001C34 ___locale 0002:00001D58 __realcvtptr 0002:00001D5C __nextrealptr 0002:00001D60 __scantodptr 0002:00001D64 __scanrsltptr 0002:00001DC0 __realcvtwptr 0002:00001DC4 __nextrealwptr 0002:00001DC8 __scanwtodptr 0002:00001DCC __scanwrsltptr 0002:00001E28 __default87 0002:00001E2C Idle __huge_flt 0002:00001E30 __huge_dble 0002:00001E38 __huge_ldble 0002:00001E42 __max_flt 0002:00001E46 __max_dble 0002:00001E4E __max_ldble 0002:00001E58 Idle __indefinite 0002:00001E5C __tiny_ldble 0002:00001E68 __turboFloat 0002:00001E6C Idle __floatconvert 0002:00001E70 __pmatherr 0002:00001E74 __pmatherrl 0002:00001FC4 Idle __kalpha 0002:00001FC6 Idle __kpunct 0002:0000200C Idle __virt_heap_size 0002:00002010 Idle __virt_chunk_size 0002:00002014 Idle __virt_chunk_size2 0002:00002018 Idle __nv_heap_size 0002:0000201C __smalloc_threshold 0002:00002020 Idle __virt_chunk_free 0002:00002024 Idle __virt_chunk_free2 0002:00002028 __firstHeap 0002:0000202C Idle __lastHeap 0002:00002030 __linktable 0002:00002034 __freeStart 0002:00002040 __rover 0002:00002048 ___allocated 0002:00002078 _errno 0002:0000207C Idle __messagefile 0002:000020F4 __atexitcnt 0002:000020F8 __exitbuf 0002:000020FC __exitfopen 0002:00002100 Idle __exitopen 0002:00002104 __setargv__ 0002:00002108 Idle __expandptr 0002:0000217C __argv0 0002:0000219C __setenvp__ 0002:000022BC Idle __DestructorCountPtr 0002:000022DC __HandlerPtr 0002:000022E0 Idle __UserHandlerPtr 0002:000022F8 __pidtab 0002:000023C0 __handles 0002:00002488 __doserrno 0002:0000248C __mbctype 0002:00002590 __mbcsCodePage 0002:000026AC __ostype 0002:000026B0 __atexittbl 0002:00002730 Idle __argv 0002:0000273C __environ 0002:00002744 __envsize 0002:00002748 Idle __env_lock 0002:0000274C __dll_table 0002:00002754 __ExcRegPtr 0002:00002758 __osenv 0002:0000275C __wosenv 0002:00002760 __oscmd 0002:00002764 __woscmd 0002:00002768 __argc 0002:0000276C __C0argc 0002:00002770 __C0argv 0002:00002774 __C0environ 0002:00002778 __wC0argv 0002:0000277C __wC0environ 0002:00002780 __exe_table 0002:00002788 Idle __stkbase 0002:0000278C __isWindows 0003:00000000 ___xxInfo ========================================================================= A Publics Map File contains the same Segment Map as the Segment Map File plus two tables containing the public symbols in the program. The first public name table is called 'Publics by Name' and contains the public symbols in Alphabetic order. The second Public Name table is called 'Publics by Value' and contains the same symbols in memory location order. The records in both tables contain three fields: Address, Qualifier and Public Symbol Name. The qualifier field contains extra data about the symbols. Idle means that the symbol is not used by the application or is only used locally within the module where it is defined. The linker is basically indicating that the symbol was not required for any fixupps. Note that 'Idle' doesn't necessarily mean that the symbol isn't used at all. It just means that it isn't used outside of the module where it is defined. Programmers, in an attempt to make an application slimer, may mistakenly remove functions which although flagged as 'Idle' by the linker, are required to compile a particular module/library/application. To find out functions that are truely used or unused, the OBJXREF.EXE and TCREF.EXE utilities should be used to generate a 'call tree'. See the utilities documentation ( UTILS.DOC as of this writing ) for more information about OBJXREF and TCREF. The name field contains the names for all public symbols from all modules, start-up code, and libraries used for the link. If some of the experiments that were performed to see the segments change are repeated with the Public Symbol Map file activated, the memory locations of the various global variables we added will be shown. By comparing the memory locations of the symbols with the memory ranges of the segments, the segment location of different symbols can be verified. The Detailed Map File ===================== The third type of map file that the Borland Compilers and Linker can produce is the Detailed Map File. To produce a Detailed Map file from the integrated development environment set Options|Linkers|Settings|Map File to Detailed. From the Command Line compiler use the -ls qualifier. With the Stand Alone Linker use the /s qualifier. For our minimal example program the following detailed Map file is produced. ========================================================================= Start Length Name Class 0001:00000000 000008D88H _TEXT CODE 0002:00000000 000002250H _DATA DATA 0002:00002250 000000000H _TLSCBA TLSCBA 0002:00002250 000000048H _INIT_ INITDATA 0002:00002298 000000000H _INITEND_ INITDATA 0002:00002298 000000024H _EXIT_ EXITDATA 0002:000022BC 000000000H _EXITEND_ EXITDATA 0002:000022BC 000000000H CONST CONST 0002:000022BC 0000004D4H _BSS BSS 0002:00002790 000000000H _BSSEND BSS 0003:00000000 0000000B0H _TLS TLS 0003:000000B0 000000000H _TLSEND TLS Detailed map of segments 0001:00000000 00000108 C=CODE S=_TEXT G=(none) M=c0nt.ASM ACBP=A9 0001:00000108 00000005 C=CODE S=_TEXT G=(none) M=m.cpp ACBP=A9 0001:00000110 0000001E C=CODE S=_TEXT G=(none) M=memchr.ASM ACBP=A9 0001:00000130 00000024 C=CODE S=_TEXT G=(none) M=memcpy.ASM ACBP=A9 0001:00000154 0000004A C=CODE S=_TEXT G=(none) M=memmove.ASM ACBP=A9 0001:000001A0 0000008A C=CODE S=_TEXT G=(none) M=memset.ASM ACBP=A9 0001:0000022C 00000018 C=CODE S=_TEXT G=(none) M=wmemset.ASM ACBP=A9 0001:00000244 0000004B C=CODE S=_TEXT G=(none) M=strcmp.ASM ACBP=A9 0001:00000290 0000005A C=CODE S=_TEXT G=(none) M=strlen.ASM ACBP=A9 0001:000002EC 0000006E C=CODE S=_TEXT G=(none) M=strncat.ASM ACBP=A9 0001:0000035C 0000006C C=CODE S=_TEXT G=(none) M=memcmp.ASM ACBP=A9 0001:000003C8 00000018 C=CODE S=_TEXT G=(none) M=WCSLEN.C ACBP=A9 0001:000003E0 0000003F C=CODE S=_TEXT G=(none) M=WCSCPY.C ACBP=A9 0001:00000420 00000275 C=CODE S=_TEXT G=(none) M=XXV.CPP ACBP=A9 0001:00000698 00000033 C=CODE S=_TEXT G=(none) M=LOCKDBG.CPP ACBP=A9 0001:000006CC 0000000A C=CODE S=_TEXT G=(none) M=DEFHANDL.C ACBP=A9 0001:000006D8 0000013D C=CODE S=_TEXT G=(none) M=EXCEPT.C ACBP=A9 0001:00000818 00000022 C=CODE S=_TEXT G=(none) M=ta.ASM ACBP=A9 0001:0000083C 00001C0A C=CODE S=_TEXT G=(none) M=XX.CPP ACBP=A9 0001:00002448 0000003B C=CODE S=_TEXT G=(none) M=XXA.CPP ACBP=A9 0001:00002484 00000A3D C=CODE S=_TEXT G=(none) M=XXTYPE.CPP ACBP=A9 0001:00002EC4 00000046 C=CODE S=_TEXT G=(none) M=setexc.ASM ACBP=A9 0001:00002F0C 0000007D C=CODE S=_TEXT G=(none) M=ALLOCBUF.C ACBP=A9 0001:00002F8C 0000007F C=CODE S=_TEXT G=(none) M=FFLUSH.C ACBP=A9 0001:0000300C 00000000 C=CODE S=_TEXT G=(none) M=FILES.C ACBP=A9 0001:0000300C 00000000 C=CODE S=_TEXT G=(none) M=FILES2.C ACBP=A9 0001:00003010 0000005A C=CODE S=_TEXT G=(none) M=FLUSHOUT.C ACBP=A9 0001:0000306C 00000000 C=CODE S=_TEXT G=(none) M=FMODE.C ACBP=A9 0001:00003070 0000000D C=CODE S=_TEXT G=(none) M=FMODEPTR.C ACBP=A9 0001:00003080 000000D9 C=CODE S=_TEXT G=(none) M=FPUTN.C ACBP=A9 0001:0000315C 0000003E C=CODE S=_TEXT G=(none) M=FPUTS.C ACBP=A9 0001:0000319C 00000110 C=CODE S=_TEXT G=(none) M=LPUTC.C ACBP=A9 0001:000032AC 00000079 C=CODE S=_TEXT G=(none) M=PERROR.C ACBP=A9 0001:00003328 00000070 C=CODE S=_TEXT G=(none) M=SPRINTF.C ACBP=A9 0001:00003398 000000FD C=CODE S=_TEXT G=(none) M=STREAMS.C ACBP=A9 0001:00003498 000009B3 C=CODE S=_TEXT G=(none) M=VPRINTER.C ACBP=A9 0001:00003E4C 00000027 C=CODE S=_TEXT G=(none) M=XFFLUSH.C ACBP=A9 0001:00003E74 00000198 C=CODE S=_TEXT G=(none) M=__WRITE.C ACBP=A9 0001:0000400C 00000011 C=CODE S=_TEXT G=(none) M=_CFINFO.C ACBP=A9 0001:00004020 00000038 C=CODE S=_TEXT G=(none) M=_FLSHALL.C ACBP=A9 0001:00004058 00000017 C=CODE S=_TEXT G=(none) M=_UMASK.C ACBP=A9 0001:00004070 000002A1 C=CODE S=_TEXT G=(none) M=HANDLES.C ACBP=A9 0001:00004314 00000076 C=CODE S=_TEXT G=(none) M=IOERROR.C ACBP=A9 0001:0000438C 00000061 C=CODE S=_TEXT G=(none) M=_WRITE.C ACBP=A9 0001:000043F0 0000004B C=CODE S=_TEXT G=(none) M=__CLOSE.C ACBP=A9 0001:0000443C 00000047 C=CODE S=_TEXT G=(none) M=__ISATTY.C ACBP=A9 0001:00004484 00000076 C=CODE S=_TEXT G=(none) M=__LSEEK.C ACBP=A9 0001:000044FC 000001F6 C=CODE S=_TEXT G=(none) M=__OPEN.C ACBP=A9 0001:000046F4 00000000 C=CODE S=_TEXT G=(none) M=BIGCTYPE.C ACBP=A9 0001:000046F8 00000588 C=CODE S=_TEXT G=(none) M=GETINFO.C ACBP=A9 0001:00004C80 00000103 C=CODE S=_TEXT G=(none) M=WIS.C ACBP=A9 0001:00004D84 00000055 C=CODE S=_TEXT G=(none) M=ISWCTYPE.C ACBP=A9 0001:00004DDC 00000000 C=CODE S=_TEXT G=(none) M=CLOCALE.C ACBP=A9 0001:00004DE0 000004C8 C=CODE S=_TEXT G=(none) M=MBYTE1.C ACBP=A9 0001:000052A8 00000200 C=CODE S=_TEXT G=(none) M=_ll.ASM ACBP=A9 0001:000054A8 00000013 C=CODE S=_TEXT G=(none) M=clear87.ASM ACBP=A9 0001:000054BC 00000028 C=CODE S=_TEXT G=(none) M=ctrl87.ASM ACBP=A9 0001:000054E4 00000018 C=CODE S=_TEXT G=(none) M=cvtentry.ASM ACBP=A9 0001:000054FC 00000017 C=CODE S=_TEXT G=(none) M=fpreset.ASM ACBP=A9 0001:00005514 0000002D C=CODE S=_TEXT G=(none) M=fuildq.ASM ACBP=A9 0001:00005544 00000021 C=CODE S=_TEXT G=(none) M=fuistq.ASM ACBP=A9 0001:00005568 00000011 C=CODE S=_TEXT G=(none) M=fxam.ASM ACBP=A9 0001:0000557C 000000B1 C=CODE S=_TEXT G=(none) M=INT64TOA.C ACBP=A9 0001:00005630 00000025 C=CODE S=_TEXT G=(none) M=qdiv10.ASM ACBP=A9 0001:00005658 0000002E C=CODE S=_TEXT G=(none) M=qmul10.ASM ACBP=A9 0001:00005688 00000018 C=CODE S=_TEXT G=(none) M=CVTFAK.C ACBP=A9 0001:000056A0 00000018 C=CODE S=_TEXT G=(none) M=CVTFAKW.C ACBP=A9 0001:000056B8 00000000 C=CODE S=_TEXT G=(none) M=DEFLT87.C ACBP=A9 0001:000056B8 00000000 C=CODE S=_TEXT G=(none) M=HUGEVAL.C ACBP=A9 0001:000056B8 00000000 C=CODE S=_TEXT G=(none) M=INITCVT.C ACBP=A9 0001:000056B8 000000FC C=CODE S=_TEXT G=(none) M=LDTRUNC.C ACBP=A9 0001:000057B4 0000008F C=CODE S=_TEXT G=(none) M=LONGTOA.C ACBP=A9 0001:00005844 0000002A C=CODE S=_TEXT G=(none) M=MATHERR.C ACBP=A9 0001:00005870 0000002E C=CODE S=_TEXT G=(none) M=MATHERRL.C ACBP=A9 0001:000058A0 00000016 C=CODE S=_TEXT G=(none) M=MATHPTR.C ACBP=A9 0001:000058B8 000002F9 C=CODE S=_TEXT G=(none) M=REALCVT.C ACBP=A9 0001:00005BB4 00000331 C=CODE S=_TEXT G=(none) M=REALCVTW.C ACBP=A9 0001:00005EE8 000004E1 C=CODE S=_TEXT G=(none) M=SCANTOD.C ACBP=A9 0001:000063CC 000004E1 C=CODE S=_TEXT G=(none) M=SCANWTOD.C ACBP=A9 0001:000068B0 000002D0 C=CODE S=_TEXT G=(none) M=XCVT.C ACBP=A9 0001:00006B80 000002EF C=CODE S=_TEXT G=(none) M=XCVTW.C ACBP=A9 0001:00006E70 00000178 C=CODE S=_TEXT G=(none) M=_POW10.C ACBP=A9 0001:00006FE8 000000FD C=CODE S=_TEXT G=(none) M=MBCTYPE.C ACBP=A9 0001:000070E8 00000020 C=CODE S=_TEXT G=(none) M=MBISSPC.C ACBP=A9 0001:00007108 00000056 C=CODE S=_TEXT G=(none) M=MBSRCHR.C ACBP=A9 0001:00007160 0000002B C=CODE S=_TEXT G=(none) M=CALLOC.C ACBP=A9 0001:0000718C 0000000F C=CODE S=_TEXT G=(none) M=DEL.CPP ACBP=A9 0001:0000719C 0000000F C=CODE S=_TEXT G=(none) M=DELARRAY.CPP ACBP=A9 0001:000071AC 00000A7B C=CODE S=_TEXT G=(none) M=HEAP.C ACBP=A9 0001:00007C28 000001BE C=CODE S=_TEXT G=(none) M=REALLOC.C ACBP=A9 0001:00007DE8 00000105 C=CODE S=_TEXT G=(none) M=VIRTMEM.C ACBP=A9 0001:00007EF0 000000A6 C=CODE S=_TEXT G=(none) M=ASSERT.C ACBP=A9 0001:00007F98 00000006 C=CODE S=_TEXT G=(none) M=ERRNO.C ACBP=A9 0001:00007FA0 00000163 C=CODE S=_TEXT G=(none) M=ERRORMSG.C ACBP=A9 0001:00008104 000000BB C=CODE S=_TEXT G=(none) M=ERMSGHLP.C ACBP=A9 0001:000081C0 00000089 C=CODE S=_TEXT G=(none) M=PLATFORM.C ACBP=A9 0001:0000824C 00000022 C=CODE S=_TEXT G=(none) M=ABORT.C ACBP=A9 0001:00008270 000000AB C=CODE S=_TEXT G=(none) M=EXIT.C ACBP=A9 0001:0000831C 00000001 C=CODE S=_TEXT G=(none) M=NOWILD.C ACBP=A9 0001:00008320 000002E7 C=CODE S=_TEXT G=(none) M=SETARGV.C ACBP=A9 0001:00008608 00000045 C=CODE S=_TEXT G=(none) M=SETARGV0.C ACBP=A9 0001:00008650 000001A0 C=CODE S=_TEXT G=(none) M=SETENVP.C ACBP=A9 0001:000087F0 00000290 C=CODE S=_TEXT G=(none) M=SIGNAL.C ACBP=A9 0001:00008A80 00000000 C=CODE S=_TEXT G=(none) M=GLOBALS.C ACBP=A9 0001:00008A80 0000013A C=CODE S=_TEXT G=(none) M=INITEXIT.C ACBP=A9 0001:00008BBC 00000166 C=CODE S=_TEXT G=(none) M=STARTUP.C ACBP=A9 0001:00008D24 00000064 C=CODE S=_TEXT G=(none) M=GETDATE.C ACBP=A9 0002:00000000 00000073 C=DATA S=_DATA G=DGROUP M=c0nt.ASM ACBP=A9 0002:00000074 00000000 C=DATA S=_DATA G=DGROUP M=m.cpp ACBP=A9 0002:00000074 00000000 C=DATA S=_DATA G=DGROUP M=memchr.ASM ACBP=A9 0002:00000074 00000000 C=DATA S=_DATA G=DGROUP M=memcpy.ASM ACBP=A9 0002:00000074 00000000 C=DATA S=_DATA G=DGROUP M=memmove.ASM ACBP=A9 0002:00000074 00000000 C=DATA S=_DATA G=DGROUP M=memset.ASM ACBP=A9 0002:00000074 00000000 C=DATA S=_DATA G=DGROUP M=wmemset.ASM ACBP=A9 0002:00000074 00000000 C=DATA S=_DATA G=DGROUP M=strcmp.ASM ACBP=A9 0002:00000074 00000000 C=DATA S=_DATA G=DGROUP M=strlen.ASM ACBP=A9 0002:00000074 00000000 C=DATA S=_DATA G=DGROUP M=strncat.ASM ACBP=A9 0002:00000074 00000000 C=DATA S=_DATA G=DGROUP M=memcmp.ASM ACBP=A9 0002:00000074 00000000 C=DATA S=_DATA G=DGROUP M=WCSLEN.C ACBP=A9 0002:00000074 00000000 C=DATA S=_DATA G=DGROUP M=WCSCPY.C ACBP=A9 0002:00000078 00000160 C=DATA S=_DATA G=DGROUP M=XXV.CPP ACBP=A9 0002:000001D8 00000000 C=DATA S=_DATA G=DGROUP M=LOCKDBG.CPP ACBP=A9 0002:000001D8 00000000 C=DATA S=_DATA G=DGROUP M=DEFHANDL.C ACBP=A9 0002:000001D8 00000014 C=DATA S=_DATA G=DGROUP M=EXCEPT.C ACBP=A9 0002:000001EC 00000000 C=DATA S=_DATA G=DGROUP M=ta.ASM ACBP=A9 0002:000001EC 00000834 C=DATA S=_DATA G=DGROUP M=XX.CPP ACBP=A9 0002:00000A20 00000000 C=DATA S=_DATA G=DGROUP M=XXA.CPP ACBP=A9 0002:00000A20 0000031C C=DATA S=_DATA G=DGROUP M=XXTYPE.CPP ACBP=A9 0002:00000D3C 00000000 C=DATA S=_DATA G=DGROUP M=setexc.ASM ACBP=A9 0002:00000D3C 00000000 C=DATA S=_DATA G=DGROUP M=ALLOCBUF.C ACBP=A9 0002:00000D3C 00000000 C=DATA S=_DATA G=DGROUP M=FFLUSH.C ACBP=A9 0002:00000D3C 000004B0 C=DATA S=_DATA G=DGROUP M=FILES.C ACBP=A9 0002:000011EC 000000CC C=DATA S=_DATA G=DGROUP M=FILES2.C ACBP=A9 0002:000012B8 00000000 C=DATA S=_DATA G=DGROUP M=FLUSHOUT.C ACBP=A9 0002:000012B8 00000004 C=DATA S=_DATA G=DGROUP M=FMODE.C ACBP=A9 0002:000012BC 00000004 C=DATA S=_DATA G=DGROUP M=FMODEPTR.C ACBP=A9 0002:000012C0 00000000 C=DATA S=_DATA G=DGROUP M=FPUTN.C ACBP=A9 0002:000012C0 00000000 C=DATA S=_DATA G=DGROUP M=FPUTS.C ACBP=A9 0002:000012C0 00000000 C=DATA S=_DATA G=DGROUP M=LPUTC.C ACBP=A9 0002:000012C0 0000047C C=DATA S=_DATA G=DGROUP M=PERROR.C ACBP=A9 0002:0000173C 00000000 C=DATA S=_DATA G=DGROUP M=SPRINTF.C ACBP=A9 0002:0000173C 00000000 C=DATA S=_DATA G=DGROUP M=STREAMS.C ACBP=A9 0002:0000173C 00000076 C=DATA S=_DATA G=DGROUP M=VPRINTER.C ACBP=A9 0002:000017B4 00000000 C=DATA S=_DATA G=DGROUP M=XFFLUSH.C ACBP=A9 0002:000017B4 00000000 C=DATA S=_DATA G=DGROUP M=__WRITE.C ACBP=A9 0002:000017B8 00000004 C=DATA S=_DATA G=DGROUP M=_CFINFO.C ACBP=A9 0002:000017BC 00000000 C=DATA S=_DATA G=DGROUP M=_FLSHALL.C ACBP=A9 0002:000017BC 00000004 C=DATA S=_DATA G=DGROUP M=_UMASK.C ACBP=A9 0002:000017C0 00000000 C=DATA S=_DATA G=DGROUP M=HANDLES.C ACBP=A9 0002:000017C0 0000012B C=DATA S=_DATA G=DGROUP M=IOERROR.C ACBP=A9 0002:000018EC 00000000 C=DATA S=_DATA G=DGROUP M=_WRITE.C ACBP=A9 0002:000018EC 00000000 C=DATA S=_DATA G=DGROUP M=__CLOSE.C ACBP=A9 0002:000018EC 00000000 C=DATA S=_DATA G=DGROUP M=__ISATTY.C ACBP=A9 0002:000018EC 00000000 C=DATA S=_DATA G=DGROUP M=__LSEEK.C ACBP=A9 0002:000018EC 00000000 C=DATA S=_DATA G=DGROUP M=__OPEN.C ACBP=A9 0002:000018F0 00000202 C=DATA S=_DATA G=DGROUP M=BIGCTYPE.C ACBP=A9 0002:00001AF4 00000008 C=DATA S=_DATA G=DGROUP M=GETINFO.C ACBP=A9 0002:00001AFC 00000000 C=DATA S=_DATA G=DGROUP M=WIS.C ACBP=A9 0002:00001AFC 00000000 C=DATA S=_DATA G=DGROUP M=ISWCTYPE.C ACBP=A9 0002:00001AFC 0000025C C=DATA S=_DATA G=DGROUP M=CLOCALE.C ACBP=A9 0002:00001D58 00000000 C=DATA S=_DATA G=DGROUP M=MBYTE1.C ACBP=A9 0002:00001D58 00000000 C=DATA S=_DATA G=DGROUP M=clear87.ASM ACBP=A9 0002:00001D58 00000000 C=DATA S=_DATA G=DGROUP M=ctrl87.ASM ACBP=A9 0002:00001D58 00000000 C=DATA S=_DATA G=DGROUP M=cvtentry.ASM ACBP=A9 0002:00001D58 00000000 C=DATA S=_DATA G=DGROUP M=fpreset.ASM ACBP=A9 0002:00001D58 00000000 C=DATA S=_DATA G=DGROUP M=fuildq.ASM ACBP=A9 0002:00001D58 00000000 C=DATA S=_DATA G=DGROUP M=fuistq.ASM ACBP=A9 0002:00001D58 00000000 C=DATA S=_DATA G=DGROUP M=fxam.ASM ACBP=A9 0002:00001D58 00000000 C=DATA S=_DATA G=DGROUP M=INT64TOA.C ACBP=A9 0002:00001D58 00000000 C=DATA S=_DATA G=DGROUP M=qdiv10.ASM ACBP=A9 0002:00001D58 00000000 C=DATA S=_DATA G=DGROUP M=qmul10.ASM ACBP=A9 0002:00001D58 00000068 C=DATA S=_DATA G=DGROUP M=CVTFAK.C ACBP=A9 0002:00001DC0 00000068 C=DATA S=_DATA G=DGROUP M=CVTFAKW.C ACBP=A9 0002:00001E28 00000004 C=DATA S=_DATA G=DGROUP M=DEFLT87.C ACBP=A9 0002:00001E2C 0000003A C=DATA S=_DATA G=DGROUP M=HUGEVAL.C ACBP=A9 0002:00001E68 00000008 C=DATA S=_DATA G=DGROUP M=INITCVT.C ACBP=A9 0002:00001E70 00000000 C=DATA S=_DATA G=DGROUP M=LDTRUNC.C ACBP=A9 0002:00001E70 00000000 C=DATA S=_DATA G=DGROUP M=LONGTOA.C ACBP=A9 0002:00001E70 00000000 C=DATA S=_DATA G=DGROUP M=MATHERR.C ACBP=A9 0002:00001E70 00000000 C=DATA S=_DATA G=DGROUP M=MATHERRL.C ACBP=A9 0002:00001E70 00000008 C=DATA S=_DATA G=DGROUP M=MATHPTR.C ACBP=A9 0002:00001E78 00000014 C=DATA S=_DATA G=DGROUP M=REALCVT.C ACBP=A9 0002:00001E8C 00000028 C=DATA S=_DATA G=DGROUP M=REALCVTW.C ACBP=A9 0002:00001EB4 00000028 C=DATA S=_DATA G=DGROUP M=SCANTOD.C ACBP=A9 0002:00001EDC 00000028 C=DATA S=_DATA G=DGROUP M=SCANWTOD.C ACBP=A9 0002:00001F04 00000000 C=DATA S=_DATA G=DGROUP M=XCVT.C ACBP=A9 0002:00001F04 00000000 C=DATA S=_DATA G=DGROUP M=XCVTW.C ACBP=A9 0002:00001F04 000000C0 C=DATA S=_DATA G=DGROUP M=_POW10.C ACBP=A9 0002:00001FC4 00000048 C=DATA S=_DATA G=DGROUP M=MBCTYPE.C ACBP=A9 0002:0000200C 00000000 C=DATA S=_DATA G=DGROUP M=MBISSPC.C ACBP=A9 0002:0000200C 00000000 C=DATA S=_DATA G=DGROUP M=MBSRCHR.C ACBP=A9 0002:0000200C 00000000 C=DATA S=_DATA G=DGROUP M=CALLOC.C ACBP=A9 0002:0000200C 00000000 C=DATA S=_DATA G=DGROUP M=DEL.CPP ACBP=A9 0002:0000200C 00000000 C=DATA S=_DATA G=DGROUP M=DELARRAY.CPP ACBP=A9 0002:0000200C 00000044 C=DATA S=_DATA G=DGROUP M=HEAP.C ACBP=A9 0002:00002050 00000000 C=DATA S=_DATA G=DGROUP M=REALLOC.C ACBP=A9 0002:00002050 00000004 C=DATA S=_DATA G=DGROUP M=VIRTMEM.C ACBP=A9 0002:00002054 00000024 C=DATA S=_DATA G=DGROUP M=ASSERT.C ACBP=A9 0002:00002078 00000004 C=DATA S=_DATA G=DGROUP M=ERRNO.C ACBP=A9 0002:0000207C 0000000C C=DATA S=_DATA G=DGROUP M=ERRORMSG.C ACBP=A9 0002:00002088 00000024 C=DATA S=_DATA G=DGROUP M=ERMSGHLP.C ACBP=A9 0002:000020AC 00000028 C=DATA S=_DATA G=DGROUP M=PLATFORM.C ACBP=A9 0002:000020D4 00000020 C=DATA S=_DATA G=DGROUP M=ABORT.C ACBP=A9 0002:000020F4 00000010 C=DATA S=_DATA G=DGROUP M=EXIT.C ACBP=A9 0002:00002104 00000000 C=DATA S=_DATA G=DGROUP M=NOWILD.C ACBP=A9 0002:00002104 00000078 C=DATA S=_DATA G=DGROUP M=SETARGV.C ACBP=A9 0002:0000217C 00000020 C=DATA S=_DATA G=DGROUP M=SETARGV0.C ACBP=A9 0002:0000219C 00000054 C=DATA S=_DATA G=DGROUP M=SETENVP.C ACBP=A9 0002:000021F0 0000005E C=DATA S=_DATA G=DGROUP M=SIGNAL.C ACBP=A9 0002:00002250 00000000 C=DATA S=_DATA G=DGROUP M=GLOBALS.C ACBP=A9 0002:00002250 00000000 C=DATA S=_DATA G=DGROUP M=INITEXIT.C ACBP=A9 0002:00002250 00000000 C=DATA S=_DATA G=DGROUP M=STARTUP.C ACBP=A9 0002:00002250 00000000 C=DATA S=_DATA G=DGROUP M=GETDATE.C ACBP=A9 0002:00002250 00000000 C=TLSCBA S=_TLSCBA G=DGROUP M=c0nt.ASM ACBP=A9 0002:00002250 00000000 C=INITDATA S=_INIT_ G=DGROUP M=c0nt.ASM ACBP=49 0002:00002250 00000006 C=INITDATA S=_INIT_ G=DGROUP M=EXCEPT.C ACBP=49 0002:00002256 00000006 C=INITDATA S=_INIT_ G=DGROUP M=FILES.C ACBP=49 0002:0000225C 00000006 C=INITDATA S=_INIT_ G=DGROUP M=FILES2.C ACBP=49 0002:00002262 00000018 C=INITDATA S=_INIT_ G=DGROUP M=INITCVT.C ACBP=49 0002:0000227A 00000006 C=INITDATA S=_INIT_ G=DGROUP M=MBCTYPE.C ACBP=49 0002:00002280 00000006 C=INITDATA S=_INIT_ G=DGROUP M=PLATFORM.C ACBP=49 0002:00002286 00000006 C=INITDATA S=_INIT_ G=DGROUP M=SETARGV.C ACBP=49 0002:0000228C 00000006 C=INITDATA S=_INIT_ G=DGROUP M=SETARGV0.C ACBP=49 0002:00002292 00000006 C=INITDATA S=_INIT_ G=DGROUP M=SETENVP.C ACBP=49 0002:00002298 00000000 C=INITDATA S=_INITEND_ G=DGROUP M=c0nt.ASM ACBP=49 0002:00002298 00000000 C=EXITDATA S=_EXIT_ G=DGROUP M=c0nt.ASM ACBP=49 0002:00002298 00000006 C=EXITDATA S=_EXIT_ G=DGROUP M=EXCEPT.C ACBP=49 0002:0000229E 00000006 C=EXITDATA S=_EXIT_ G=DGROUP M=STREAMS.C ACBP=49 0002:000022A4 00000006 C=EXITDATA S=_EXIT_ G=DGROUP M=HEAP.C ACBP=49 0002:000022AA 00000006 C=EXITDATA S=_EXIT_ G=DGROUP M=SETARGV.C ACBP=49 0002:000022B0 00000006 C=EXITDATA S=_EXIT_ G=DGROUP M=SETARGV0.C ACBP=49 0002:000022B6 00000006 C=EXITDATA S=_EXIT_ G=DGROUP M=SETENVP.C ACBP=49 0002:000022BC 00000000 C=EXITDATA S=_EXITEND_ G=DGROUP M=c0nt.ASM ACBP=49 0002:000022BC 00000000 C=CONST S=CONST G=DGROUP M=c0nt.ASM ACBP=A9 0002:000022BC 00000000 C=BSS S=_BSS G=DGROUP M=c0nt.ASM ACBP=A9 0002:000022BC 00000000 C=BSS S=_BSS G=DGROUP M=m.cpp ACBP=A9 0002:000022BC 00000000 C=BSS S=_BSS G=DGROUP M=memchr.ASM ACBP=A9 0002:000022BC 00000000 C=BSS S=_BSS G=DGROUP M=memcpy.ASM ACBP=A9 0002:000022BC 00000000 C=BSS S=_BSS G=DGROUP M=memmove.ASM ACBP=A9 0002:000022BC 00000000 C=BSS S=_BSS G=DGROUP M=memset.ASM ACBP=A9 0002:000022BC 00000000 C=BSS S=_BSS G=DGROUP M=wmemset.ASM ACBP=A9 0002:000022BC 00000000 C=BSS S=_BSS G=DGROUP M=strcmp.ASM ACBP=A9 0002:000022BC 00000000 C=BSS S=_BSS G=DGROUP M=strlen.ASM ACBP=A9 0002:000022BC 00000000 C=BSS S=_BSS G=DGROUP M=strncat.ASM ACBP=A9 0002:000022BC 00000000 C=BSS S=_BSS G=DGROUP M=memcmp.ASM ACBP=A9 0002:000022BC 00000000 C=BSS S=_BSS G=DGROUP M=WCSLEN.C ACBP=A9 0002:000022BC 00000000 C=BSS S=_BSS G=DGROUP M=WCSCPY.C ACBP=A9 0002:000022BC 00000004 C=BSS S=_BSS G=DGROUP M=XXV.CPP ACBP=A9 0002:000022C0 0000001C C=BSS S=_BSS G=DGROUP M=LOCKDBG.CPP ACBP=A9 0002:000022DC 00000000 C=BSS S=_BSS G=DGROUP M=DEFHANDL.C ACBP=A9 0002:000022DC 00000008 C=BSS S=_BSS G=DGROUP M=EXCEPT.C ACBP=A9 0002:000022E4 00000000 C=BSS S=_BSS G=DGROUP M=ta.ASM ACBP=A9 0002:000022E4 0000000C C=BSS S=_BSS G=DGROUP M=XX.CPP ACBP=A9 0002:000022F0 00000000 C=BSS S=_BSS G=DGROUP M=XXA.CPP ACBP=A9 0002:000022F0 00000002 C=BSS S=_BSS G=DGROUP M=XXTYPE.CPP ACBP=A9 0002:000022F4 00000000 C=BSS S=_BSS G=DGROUP M=setexc.ASM ACBP=A9 0002:000022F4 00000000 C=BSS S=_BSS G=DGROUP M=ALLOCBUF.C ACBP=A9 0002:000022F4 00000000 C=BSS S=_BSS G=DGROUP M=FFLUSH.C ACBP=A9 0002:000022F4 00000000 C=BSS S=_BSS G=DGROUP M=FILES.C ACBP=A9 0002:000022F8 00000190 C=BSS S=_BSS G=DGROUP M=FILES2.C ACBP=A9 0002:00002488 00000000 C=BSS S=_BSS G=DGROUP M=FLUSHOUT.C ACBP=A9 0002:00002488 00000000 C=BSS S=_BSS G=DGROUP M=FMODE.C ACBP=A9 0002:00002488 00000000 C=BSS S=_BSS G=DGROUP M=FMODEPTR.C ACBP=A9 0002:00002488 00000000 C=BSS S=_BSS G=DGROUP M=FPUTN.C ACBP=A9 0002:00002488 00000000 C=BSS S=_BSS G=DGROUP M=FPUTS.C ACBP=A9 0002:00002488 00000000 C=BSS S=_BSS G=DGROUP M=LPUTC.C ACBP=A9 0002:00002488 00000000 C=BSS S=_BSS G=DGROUP M=PERROR.C ACBP=A9 0002:00002488 00000000 C=BSS S=_BSS G=DGROUP M=SPRINTF.C ACBP=A9 0002:00002488 00000000 C=BSS S=_BSS G=DGROUP M=STREAMS.C ACBP=A9 0002:00002488 00000000 C=BSS S=_BSS G=DGROUP M=VPRINTER.C ACBP=A9 0002:00002488 00000000 C=BSS S=_BSS G=DGROUP M=XFFLUSH.C ACBP=A9 0002:00002488 00000000 C=BSS S=_BSS G=DGROUP M=__WRITE.C ACBP=A9 0002:00002488 00000000 C=BSS S=_BSS G=DGROUP M=_CFINFO.C ACBP=A9 0002:00002488 00000000 C=BSS S=_BSS G=DGROUP M=_FLSHALL.C ACBP=A9 0002:00002488 00000000 C=BSS S=_BSS G=DGROUP M=_UMASK.C ACBP=A9 0002:00002488 00000000 C=BSS S=_BSS G=DGROUP M=HANDLES.C ACBP=A9 0002:00002488 00000004 C=BSS S=_BSS G=DGROUP M=IOERROR.C ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=_WRITE.C ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=__CLOSE.C ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=__ISATTY.C ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=__LSEEK.C ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=__OPEN.C ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=BIGCTYPE.C ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=GETINFO.C ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=WIS.C ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=ISWCTYPE.C ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=CLOCALE.C ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=MBYTE1.C ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=clear87.ASM ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=ctrl87.ASM ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=cvtentry.ASM ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=fpreset.ASM ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=fuildq.ASM ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=fuistq.ASM ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=fxam.ASM ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=INT64TOA.C ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=qdiv10.ASM ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=qmul10.ASM ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=CVTFAK.C ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=CVTFAKW.C ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=DEFLT87.C ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=HUGEVAL.C ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=INITCVT.C ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=LDTRUNC.C ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=LONGTOA.C ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=MATHERR.C ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=MATHERRL.C ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=MATHPTR.C ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=REALCVT.C ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=REALCVTW.C ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=SCANTOD.C ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=SCANWTOD.C ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=XCVT.C ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=XCVTW.C ACBP=A9 0002:0000248C 00000000 C=BSS S=_BSS G=DGROUP M=_POW10.C ACBP=A9 0002:0000248C 00000108 C=BSS S=_BSS G=DGROUP M=MBCTYPE.C ACBP=A9 0002:00002594 00000000 C=BSS S=_BSS G=DGROUP M=MBISSPC.C ACBP=A9 0002:00002594 00000000 C=BSS S=_BSS G=DGROUP M=MBSRCHR.C ACBP=A9 0002:00002594 00000000 C=BSS S=_BSS G=DGROUP M=CALLOC.C ACBP=A9 0002:00002594 00000000 C=BSS S=_BSS G=DGROUP M=DEL.CPP ACBP=A9 0002:00002594 00000000 C=BSS S=_BSS G=DGROUP M=DELARRAY.CPP ACBP=A9 0002:00002594 00000000 C=BSS S=_BSS G=DGROUP M=HEAP.C ACBP=A9 0002:00002594 00000000 C=BSS S=_BSS G=DGROUP M=REALLOC.C ACBP=A9 0002:00002594 00000000 C=BSS S=_BSS G=DGROUP M=VIRTMEM.C ACBP=A9 0002:00002594 00000100 C=BSS S=_BSS G=DGROUP M=ASSERT.C ACBP=A9 0002:00002694 00000000 C=BSS S=_BSS G=DGROUP M=ERRNO.C ACBP=A9 0002:00002694 00000000 C=BSS S=_BSS G=DGROUP M=ERRORMSG.C ACBP=A9 0002:00002694 00000018 C=BSS S=_BSS G=DGROUP M=ERMSGHLP.C ACBP=A9 0002:000026AC 00000004 C=BSS S=_BSS G=DGROUP M=PLATFORM.C ACBP=A9 0002:000026B0 00000000 C=BSS S=_BSS G=DGROUP M=ABORT.C ACBP=A9 0002:000026B0 00000080 C=BSS S=_BSS G=DGROUP M=EXIT.C ACBP=A9 0002:00002730 00000000 C=BSS S=_BSS G=DGROUP M=NOWILD.C ACBP=A9 0002:00002730 0000000C C=BSS S=_BSS G=DGROUP M=SETARGV.C ACBP=A9 0002:0000273C 00000000 C=BSS S=_BSS G=DGROUP M=SETARGV0.C ACBP=A9 0002:0000273C 00000010 C=BSS S=_BSS G=DGROUP M=SETENVP.C ACBP=A9 0002:0000274C 00000000 C=BSS S=_BSS G=DGROUP M=SIGNAL.C ACBP=A9 0002:0000274C 00000044 C=BSS S=_BSS G=DGROUP M=GLOBALS.C ACBP=A9 0002:00002790 00000000 C=BSS S=_BSS G=DGROUP M=INITEXIT.C ACBP=A9 0002:00002790 00000000 C=BSS S=_BSS G=DGROUP M=STARTUP.C ACBP=A9 0002:00002790 00000000 C=BSS S=_BSS G=DGROUP M=GETDATE.C ACBP=A9 0002:00002790 00000000 C=BSS S=_BSSEND G=DGROUP M=c0nt.ASM ACBP=A9 0003:00000000 00000000 C=TLS S=_TLS G=THREADGROUP M=c0nt.ASM ACBP=A9 0003:00000000 000000B0 C=TLS S=_TLS G=THREADGROUP M=XXV.CPP ACBP=A9 0003:000000B0 00000000 C=TLS S=_TLSEND G=THREADGROUP M=c0nt.ASM ACBP=A9 Address Publics by Name 0001:0000718C operator delete(void*) 0001:0000719C operator delete[](void*) 0001:00002E41 __tpdsc__[Bad_typeid] . . (more publics) . . Address Publics by Value 0001:00000000 Idle __acrtused 0001:00000046 Idle __GetExceptDLLinfo 0001:0000004B Idle __isDLL . . (more publics) . . ======================================================================== A Detailed Map contains all the information from both the Segment Map and the Public Map files. It also contains a table with a more detailed breakdown of the Segments in memory. The detailed segment table contains seven fields: Memory Location, Size in Bytes, Segment Class, Segment Name, Group, Module, and Alignment/Combining. The Memory Location field shows the start address of the module withing the virtual address space. The size field shows how large the partial segment is. The Class field shows the segment class that the partial segment belongs to. The Class field types are the same as defined in the segment map section. The Name field show the segment name that the partial segment belongs to. The group field shows the Group that the partial segment belongs to. The module name is the file name of the translation unit/source code that contains the sub segments. The Alignment/Combination, or ACBP field contains bit coded information for A (alignment), C (Combination), and B (Big Field) data. The P field, defined by Intel, is not used by the Borland Compilers nor the Borland Linker. The bit definitions follow: Segment size (Big Field) 0000 0000 = 0 = Segment less then 64k 0000 0010 = 2 = Segment > 64k Segment Combination 0000 0000 = 0 = May not be combined 0000 1000 = 8 = public combined segment Segment Alignment 0000 0000 = 00 = Absolute segment 0010 0000 = 20 = byte alignment 0100 0000 = 40 = word alignment 0110 0000 = 60 = paragraph alignment 1000 0000 = 80 = page alignment 1010 0000 = A0 = Unnamed Absolute storage The Dump Map File ================= The Dump Map file is produced by the Borland Linker when the menu choices or command line parameters are set to produce a detailed map file and linker encounters some error conditions such as exceeding a table limit. The map file produced in those cases will actually contain a hex dump. ======================================================================== Optional Reading - the MapAddr utility ================ The following is a short interesting program written in Perl which given an address, parses a map file generated by ILink32, and locates the public symbol closest to that address. This can assist in determining where in your EXE or DLL a crash is occurring if all you know is a hexadecimal address. ======================================================================== @rem = '--*-Perl-*--'; @rem = ' @echo off perl -S %0.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 goto endofperl @rem '; die "usage: mapaddr
\n" if ! @ARGV; ($mapfile, $addr) = @ARGV; @segments; open(MAP, $mapfile) || die "Can't open map file '$mapfile'\n"; $blank = ; $found = 0; while () { last if /^\s+$/; if (/^\s+([0-9]{4}):([0-9A-F]+) ([0-9A-F]+)H (\S+)/o) { $index = hex $1; $base = hex $2; $length = hex $3; $segments[$index - 1] = { "base" => $base, "length" => $length, "name" => $4 }; $found = 1; } } die "Couldn't find segment information!\n" if ! $found; $addr = hex $addr; $seg = 0; $goal = 0; $idx = 0; foreach $segment (@segments) { $idx++; if ($addr >= $segment->{"base"} && $addr < $segment->{"base"} + $segment->{"length"}) { $goal = $addr - $segment->{"base"}; $seg = $segment; last; } } while () { last if /Detailed map of segments/; } $found = 0; while () { if (/^\s+000${idx}:([0-9A-F]+)\s+([0-9A-F]+).*M=(\S+)/o) { $base = hex $1; $len = hex $2; if ($goal >= $base && $goal < $base + $len) { $module = $3; $module =~ tr/A-Z/a-z/; printf("\nSegment: %s\n\n Base 0x%0x\n " . "Length %-8ld (0x%0x)\n Offset %-8ld (0x%0x)\n", $seg->{"name"}, $seg->{"base"}, $seg->{"length"}, $seg->{"length"}, $goal, $goal); printf("\nModule: %s\n\n Base 0x%0x (0x%0x + 0x%0x)\n " . "Length %-8ld (0x%0x)\n Offset %-8ld (0x%0x)\n", $module, $seg->{"base"} + $base, $seg->{"base"}, $base, $len, $len, $goal - $base, $goal - $base); print "\nSymbols:\n\n"; $found = 1; last; } } } die "Couldn't find module that contains symbol!\n" if ! $found; while () { last if /Publics by Value/; } $last_sym = 0; $last_addr = 0; @extras; $found = 0; while () { if (/^\s+000${idx}:([0-9A-F]+)\s+(.*)/o && $goal < hex $1) { $diff_str = ""; $diff = $goal - hex $last_addr; $diff_str = sprintf(" + %ld (0x%0x)", $diff, $diff) if $diff; foreach $sym ((@extras, $last_sym)) { printf(" %08x %-40s %s\n", $seg->{"base"} + hex $last_addr, $sym, $diff_str); } $found = 1; last; } if (hex $1 == hex $last_addr) { push @extras, $last_sym; } else { undef @extras; } ($last_addr, $last_sym) = ($1, $2); } close MAP; die "Couldn't find a symbol at that address!\n" if ! $found; __END__ :endofperl =================================================================== DISCLAIMER: You have the right to use this technical information subject to the terms of the No-Nonsense License Statement that you received with the Borland product to which this information pertains.