Jump to content
 







Main menu
   


Navigation  



Main page
Contents
Current events
Random article
About Wikipedia
Contact us
Donate
 




Contribute  



Help
Learn to edit
Community portal
Recent changes
Upload file
 








Search  

































Create account

Log in
 









Create account
 Log in
 




Pages for logged out editors learn more  



Contributions
Talk
 



















Contents

   



(Top)
 


1 Object file formats  



1.1  Absolute files  





1.2  Segmentation  







2 See also  





3 References  





4 Further reading  














Object file






العربية
Català
Ελληνικά
فارسی
Français
Bahasa Indonesia
Қазақша
Norsk bokmål
Português
Русский
Türkçe
Українська
 

Edit links
 









Article
Talk
 

















Read
Edit
View history
 








Tools
   


Actions  



Read
Edit
View history
 




General  



What links here
Related changes
Upload file
Special pages
Permanent link
Page information
Cite this page
Get shortened URL
Download QR code
Wikidata item
 




Print/export  



Download as PDF
Printable version
 
















Appearance
   

 






From Wikipedia, the free encyclopedia
 


Anobject file is a file that contains machine codeorbytecode, as well as other data and metadata, generated by a compilerorassembler 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]

Alinker 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 stabsorDWARF.

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.
  • ^ 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 & 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

    [edit]
    Retrieved from "https://en.wikipedia.org/w/index.php?title=Object_file&oldid=1235463593"

    Categories: 
    Executable file formats
    Compiler construction
    Computer libraries
    Programming language implementation
    Hidden categories: 
    Articles with short description
    Short description matches Wikidata
    Use dmy dates from November 2023
    Use list-defined references from November 2023
    CS1 location test
     



    This page was last edited on 19 July 2024, at 11:42 (UTC).

    Text is available under the Creative Commons Attribution-ShareAlike License 4.0; additional terms may apply. By using this site, you agree to the Terms of Use and Privacy Policy. Wikipedia® is a registered trademark of the Wikimedia Foundation, Inc., a non-profit organization.



    Privacy policy

    About Wikipedia

    Disclaimers

    Contact Wikipedia

    Code of Conduct

    Developers

    Statistics

    Cookie statement

    Mobile view



    Wikimedia Foundation
    Powered by MediaWiki