fbpx
Wikipedia

Object file

An object file is a file that contains machine code or bytecode, as well as other data and metadata, generated by a compiler or assembler from source code during the compilation or assembly process. The machine code that is generated is known as object code.

The object code is usually relocatable, and not usually directly executable. There are various formats for object files, and the same machine code can be packaged in different object file formats. An object file may also work like a shared library.

The metadata that object files may include can be used for linking or debugging; it includes information to resolve symbolic cross-references between different modules, relocation information, stack unwinding information, comments, program symbols, and debugging or profiling information. Other metadata may include the date and time of compilation, the compiler name and version, and other identifying information.

The term "object program" dates from at least the 1950s:

A term in automatic programming for the machine language program produced by the machine by translating a source program written by the programmer in a language similar to algebraic notation.[1]

A linker is used to combine the object code into one executable program or library pulling in precompiled system libraries as needed.

Object file formats edit

There are many different object file formats; originally each type of computer had its own unique format, but with the advent of Unix and other portable operating systems, some formats, such as ELF and COFF, have been defined and used on different kinds of systems.

Some systems make a distinction between formats which are directly executable and formats which require processing by the linker. For example, OS/360 and successors call the first format a load module and the second an object module. In this case the files have entirely different formats.[2] DOS and Windows also have different file formats for executable files and object files, such as Portable Executable for executables and COFF for object files in 32-bit and 64-bit Windows.

Unix and Unix-like systems have used the same format for executable and object files, starting with the original a.out format. Some formats can contain machine code for different processors, with the correct one chosen by the operating system when the program is loaded.[3][4]

The design and/or choice of an object file format is a key part of overall system design. It affects the performance of the linker and thus programmer turnaround while a program is being developed. If the format is used for executables, the design also affects the time programs take to begin running, and thus the responsiveness for users.

The GNU Project's Binary File Descriptor library (BFD library) provides a common API for the manipulation of object files in a variety of formats.

Absolute files edit

Many early computers, or small microcomputers, support only an absolute object format. Programs are not relocatable; they need to be assembled or compiled to execute at specific, predefined addresses. The file contains no relocation or linkage information. These files can be loaded into read/write memory, or stored in read-only memory. For example, the Motorola 6800 MIKBUG monitor contains a routine to read an absolute object file (SREC Format) from paper tape.[5] DOS COM files are a more recent example of absolute object files.[6]

Segmentation edit

Most object file formats are structured as separate sections of data, each section containing a certain type of data. These sections are known as "segments" due to the term "memory segment", which was previously a common form of memory management. When a program is loaded into memory by a loader, the loader allocates various regions of memory to the program. Some of these regions correspond to sections of the object file, and thus are usually known by the same names. Others, such as the stack, only exist at run time. In some cases, relocation is done by the loader (or linker) to specify the actual memory addresses. However, for many programs or architectures, relocation is not necessary, due to being handled by the memory management unit or by position-independent code. On some systems the segments of the object file can then be copied (paged) into memory and executed, without needing further processing. On these systems, this may be done lazily, that is, only when the segments are referenced during execution, for example via a memory-mapped file backed by the object file.

Types of data supported by typical object file formats:[7]

Segments in different object files may be combined by the linker according to rules specified when the segments are defined. Conventions exist for segments shared between object files; for instance, in DOS there are different memory models that specify the names of special segments and whether or not they may be combined.[8]

The debugging data format of debugging information may either be an integral part of the object file format, as in COFF, or a semi-independent format which may be used with several object formats, such as stabs or DWARF.

See also edit

References edit

  1. ^ Wrubel, Marshal H. (1959). A primer of programming for digital computers. New York, USA: McGraw-Hill. p. 222. Retrieved 2020-07-31.
  2. ^ IBM OS Linkage Editor and Loader (PDF). IBM Corporation. 1973. p. 16. Retrieved 2012-08-06.
  3. ^ . OS X ABI Mach-O File Format Reference. Apple Inc. 2009-02-04 [2003]. Archived from the original on 2014-09-04.
  4. ^ "FatELF: Universal Binaries for Linux". Retrieved 2020-08-02.
  5. ^ Wiles, Mike; Felix, Andre. MCM6830L7 MIKBUG/MINIBUG ROM (PDF). Motorola Semiconductor Products, Inc. Retrieved 2020-07-31.
  6. ^ Godse, Deepali A.; Godse, Atul P. (2008). Microprocessor (1 ed.). Pune, India: Technical Publications. pp. 3–15. ISBN 978-81-8431-355-0.
  7. ^ Mauerer, Wolfgang (2010). "Appendix E. The ELF Binary Format". Professional Linux Kernel Architecture. John Wiley & Sons. p. Appendix E. ISBN 978-0-470-34343-2. Retrieved 2020-08-01.
  8. ^ Irvine, Kip R. (1993). Assembly language for the IBM-PC (2 ed.). New York, USA: Macmillan. ISBN 0-02-359651-1.

Further reading edit

  • Levine, John R. (2000) [October 1999]. "Chapter 3: Object files". Linkers and Loaders. The Morgan Kaufmann Series in Software Engineering and Programming (1 ed.). San Francisco, California, USA: Morgan Kaufmann. p. 256. ISBN 1-55860-496-0. OCLC 42413382. Archived from the original on 2013-01-25. Retrieved 2020-01-12. Code: [1][2] Errata: [3]
  • The Microsoft OBJ File Format. Microsoft, Product Support Services. Application Note SS0288. Archived from the original on 2017-09-09. Retrieved 2017-08-21.
  • Elliott, John C. (2002). "Microsoft REL file format". seasip.info. from the original on 2023-11-25. Retrieved 2023-11-25. (NB. Description of the Microsoft REL file format for relocatable objects, also used by Digital Research.)
  • Elliott, John C. (2012-06-05) [2000-01-02]. "PRL file format". seasip.info. from the original on 2020-01-26. Retrieved 2020-01-26. [4]
  • Fraser, Christopher "Chris" W.; Hanson, David R. (April–May 1982) [1981-09-09, 1981-11-02]. "A Machine-Independent Linker" (PDF). Software: Practice and Experience [d]. 12 (4). University of Arizona, Tucson, Arizona, USA: John Wiley & Sons, Ltd.: 351–366. doi:10.1002/spe.4380120407. ISSN 0038-0644. (PDF) from the original on 2023-11-28. Retrieved 2023-11-28. (16 pages)
  • Montuelle, Jean; Willers, Ian (25–28 September 1979) [October 1978]. Written at CERN, Geneve, Switzerland. Cross Software Using a Universal Object Module Format, CUFOM. Euro IFIP, London, UK. CERN-DD/78/20. Retrieved 2023-11-28. (1+23 pages)
  • Microprocessor Universal Format for Object Modules, MUFOM (draft document), IEEE Working Group, P695lD2
  • Montuelle, Jean; Willers, Ian (September 1982). "Letter to the Editor". Software: Practice and Experience [d]. 12 (9). CERN, Geneve, Switzerland: John Wiley & Sons, Ltd.: 883–884 [884]. doi:10.1002/spe.4380120909. ISSN 0038-0644. from the original on 2023-11-28. Retrieved 2023-11-28. (1 page) (NB. Describes the history and relationship of IEEE 695 with CUFOM and MUFOM.)
  • IEEE 695-1990: IEEE Standard for Microprocessor Universal Format for Object Modules. IEEE. 1990-02-05. doi:10.1109/IEEESTD.1990.101062. ISBN 978-0-7381-3028-6. (NB. Superseeds IEEE 695-1985 (1985-09-09)).

object, file, object, file, file, that, contains, machine, code, bytecode, well, other, data, metadata, generated, compiler, assembler, from, source, code, during, compilation, assembly, process, machine, code, that, generated, known, object, code, object, cod. An object file is a file that contains machine code or bytecode as well as other data and metadata generated by a compiler or assembler from source code during the compilation or assembly process The machine code that is generated is known as object code The object code is usually relocatable and not usually directly executable There are various formats for object files and the same machine code can be packaged in different object file formats An object file may also work like a shared library The metadata that object files may include can be used for linking or debugging it includes information to resolve symbolic cross references between different modules relocation information stack unwinding information comments program symbols and debugging or profiling information Other metadata may include the date and time of compilation the compiler name and version and other identifying information The term object program dates from at least the 1950s A term in automatic programming for the machine language program produced by the machine by translating a source program written by the programmer in a language similar to algebraic notation 1 A linker is used to combine the object code into one executable program or library pulling in precompiled system libraries as needed Contents 1 Object file formats 1 1 Absolute files 1 2 Segmentation 2 See also 3 References 4 Further readingObject file formats editThere are many different object file formats originally each type of computer had its own unique format but with the advent of Unix and other portable operating systems some formats such as ELF and COFF have been defined and used on different kinds of systems Some systems make a distinction between formats which are directly executable and formats which require processing by the linker For example OS 360 and successors call the first format a load module and the second an object module In this case the files have entirely different formats 2 DOS and Windows also have different file formats for executable files and object files such as Portable Executable for executables and COFF for object files in 32 bit and 64 bit Windows Unix and Unix like systems have used the same format for executable and object files starting with the original a out format Some formats can contain machine code for different processors with the correct one chosen by the operating system when the program is loaded 3 4 The design and or choice of an object file format is a key part of overall system design It affects the performance of the linker and thus programmer turnaround while a program is being developed If the format is used for executables the design also affects the time programs take to begin running and thus the responsiveness for users The GNU Project s Binary File Descriptor library BFD library provides a common API for the manipulation of object files in a variety of formats Absolute files edit Many early computers or small microcomputers support only an absolute object format Programs are not relocatable they need to be assembled or compiled to execute at specific predefined addresses The file contains no relocation or linkage information These files can be loaded into read write memory or stored in read only memory For example the Motorola 6800 MIKBUG monitor contains a routine to read an absolute object file SREC Format from paper tape 5 DOS COM files are a more recent example of absolute object files 6 Segmentation edit Most object file formats are structured as separate sections of data each section containing a certain type of data These sections are known as segments due to the term memory segment which was previously a common form of memory management When a program is loaded into memory by a loader the loader allocates various regions of memory to the program Some of these regions correspond to sections of the object file and thus are usually known by the same names Others such as the stack only exist at run time In some cases relocation is done by the loader or linker to specify the actual memory addresses However for many programs or architectures relocation is not necessary due to being handled by the memory management unit or by position independent code On some systems the segments of the object file can then be copied paged into memory and executed without needing further processing On these systems this may be done lazily that is only when the segments are referenced during execution for example via a memory mapped file backed by the object file Types of data supported by typical object file formats 7 Header descriptive and control information Code segment text segment executable code Data segment initialized static variables Read only data segment rodata initialized static constants BSS segment uninitialized static data both variables and constants External definitions and references for linking Relocation information Dynamic linking information Debugging information Segments in different object files may be combined by the linker according to rules specified when the segments are defined Conventions exist for segments shared between object files for instance in DOS there are different memory models that specify the names of special segments and whether or not they may be combined 8 The debugging data format of debugging information may either be an integral part of the object file format as in COFF or a semi independent format which may be used with several object formats such as stabs or DWARF See also editOS 360 Object File Format Intel hexadecimal object file format typically with file extension HEX but sometimes also with OBJ Object Module Format ICL OMF for ICL VME Object Module Format Intel OMF for Intel 8080 8085 OBJ for Intel 8086 Mach OReferences edit Wrubel Marshal H 1959 A primer of programming for digital computers New York USA McGraw Hill p 222 Retrieved 2020 07 31 IBM OS Linkage Editor and Loader PDF IBM Corporation 1973 p 16 Retrieved 2012 08 06 Universal Binaries and 32 bit 64 bit PowerPC Binaries OS X ABI Mach O File Format Reference Apple Inc 2009 02 04 2003 Archived from the original on 2014 09 04 FatELF Universal Binaries for Linux Retrieved 2020 08 02 Wiles Mike Felix Andre MCM6830L7 MIKBUG MINIBUG ROM PDF Motorola Semiconductor Products Inc Retrieved 2020 07 31 Godse Deepali A Godse Atul P 2008 Microprocessor 1 ed Pune India Technical Publications pp 3 15 ISBN 978 81 8431 355 0 Mauerer Wolfgang 2010 Appendix E The ELF Binary Format Professional Linux Kernel Architecture John Wiley amp Sons p Appendix E ISBN 978 0 470 34343 2 Retrieved 2020 08 01 Irvine Kip R 1993 Assembly language for the IBM PC 2 ed New York USA Macmillan ISBN 0 02 359651 1 Further reading editLevine John R 2000 October 1999 Chapter 3 Object files Linkers and Loaders The Morgan Kaufmann Series in Software Engineering and Programming 1 ed San Francisco California USA Morgan Kaufmann p 256 ISBN 1 55860 496 0 OCLC 42413382 Archived from the original on 2013 01 25 Retrieved 2020 01 12 Code 1 2 Errata 3 The Microsoft OBJ File Format Microsoft Product Support Services Application Note SS0288 Archived from the original on 2017 09 09 Retrieved 2017 08 21 Elliott John C 2002 Microsoft REL file format seasip info Archived from the original on 2023 11 25 Retrieved 2023 11 25 NB Description of the Microsoft REL file format for relocatable objects also used by Digital Research Elliott John C 2012 06 05 2000 01 02 PRL file format seasip info Archived from the original on 2020 01 26 Retrieved 2020 01 26 4 Fraser Christopher Chris W Hanson David R April May 1982 1981 09 09 1981 11 02 A Machine Independent Linker PDF Software Practice and Experience d 12 4 University of Arizona Tucson Arizona USA John Wiley amp Sons Ltd 351 366 doi 10 1002 spe 4380120407 ISSN 0038 0644 Archived PDF from the original on 2023 11 28 Retrieved 2023 11 28 16 pages Montuelle Jean Willers Ian 25 28 September 1979 October 1978 Written at CERN Geneve Switzerland Cross Software Using a Universal Object Module Format CUFOM Euro IFIP London UK CERN DD 78 20 Retrieved 2023 11 28 1 23 pages Microprocessor Universal Format for Object Modules MUFOM draft document IEEE Working Group P695lD2 Montuelle Jean Willers Ian September 1982 Letter to the Editor Software Practice and Experience d 12 9 CERN Geneve Switzerland John Wiley amp Sons Ltd 883 884 884 doi 10 1002 spe 4380120909 ISSN 0038 0644 Archived from the original on 2023 11 28 Retrieved 2023 11 28 1 page NB Describes the history and relationship of IEEE 695 with CUFOM and MUFOM IEEE 695 1990 IEEE Standard for Microprocessor Universal Format for Object Modules IEEE 1990 02 05 doi 10 1109 IEEESTD 1990 101062 ISBN 978 0 7381 3028 6 NB Superseeds IEEE 695 1985 1985 09 09 Retrieved from https en wikipedia org w index php title Object file amp oldid 1221649801, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.