A.out: Difference between revisions

m
Added positions and ELF link
[unchecked revision][unchecked revision]
m (Added basic description)
m (Added positions and ELF link)
Line 2:
{{File formats}}
 
A.OUT is the "original" binary format for Unix machines. It is considered obsolete today because of several shortcomings. It was superseded by System V [[ELF]]. However, as it is extremely simple and supported by many compilers/assemblers, it may be a good choice if you're willing to develop your own format or have more information than 'raw binary' for your bootloader.
 
==Structure==
Line 33:
|}
===The exec header===
Every binary file begins with an exec structure, which is 32 or 64 bytes in size:
<source lang="c">
struct exec {
Line 49:
{| class="wikitable"
|-
! Position (32 bit)
! Position (64 bit)
! Field
! Description
|-
|0-3
|0-7
|a_midmag
|This field is stored in network byte-order so that binaries for machines with alternative byte orders can be distinguished. It has a number of sub-components accessed by the macros N_GETFLAG(), N_GETMID(), and N_GETMAGIC(), and set by the macro N_SETMAGIC().
|-
|4-7
|8-15
|a_text
|Contains the size of the text segment in bytes.
|-
|8-11
|16-23
|a_data
|Contains the size of the data segment in bytes.
|-
|12-15
|24-31
|a_bss
|Contains the number of bytes in the `bss segment'. The kernel loads the program so that this amount of writable memory appears to follow the data segment and initially reads as zeroes.
|-
|16-19
|32-39
|a_syms
|Contains the size in bytes of the symbol table section.
|-
|20-23
|40-47
|a_entry
|Contains the address in memory of the entry point of the program after the kernel has loaded it; the kernel starts the execution of the program from the machine instruction at this address.
|-
|24-27
|48-55
|a_trsize
|Contains the size in bytes of the text relocation table.
|-
|28-31
|56-63
|a_drsize
|Contains the size in bytes of the data relocation table.
Anonymous user