A.2 Section table

A section table contains a collection of section table entries each containing 40 bytes of information listed in Table 10. The number of entries in the Section Table is given by the NumberOfSections field in the file header. Entries in the Section Table are numbered starting from one. The code and data memory section entries are in the order chosen by the linker. In an image file, the virtual addresses for sections must be assigned by the linker such that they are in ascending order and adjacent, and they must be a multiple of the Section Align value in the optional header.



Table 10: Section table entries in COFF




OffsetSize Field

Description





0 8 Name

An 8-byte, null-padded ASCII string. There is no terminating null if the string is exactly eight characters long. For longer names, this field contains a slash (/) followed by ASCII representation of a decimal number: this number is an offset into the string table. Executable images do not use a string table and do not support section names longer than eight characters. Long names in object files will be truncated if emitted to an executable file.





8 4 VirtualSize

Total size of the section when loaded into memory. If this value is greater than Size of Raw Data, the section is zero-padded. This field is valid only for executable images and should be set to 0 for object files.





12 4 VirtualAddress

For executable images this is the address of the first byte of the section, when loaded into memory, relative to the image base. For object files, this field is the address of the first byte before relocation is applied; for simplicity, compilers should set this to zero. Otherwise, it is an arbitrary value that is subtracted from offsets during relocation.





16 4 SizeOfRawData

Size of the section (object file) or size of the initialized data on disk (image files). For executable image, this must be a multiple of FileAlignment from the optional header. If this is less than VirtualSize the remainder of the section is zero filled. Because this field is rounded while the VirtualSize field is not it is possible for this to be greater than VirtualSize as well. When a section contains only uninitialized data, this field should be 0.





20 4 PointerToRawData

File pointer to section’s first page within the COFF file. For executable images, this must be a multiple of FileAlignment from the optional header. For object files, the value should be aligned on a four-byte boundary for best performance. When a section contains only uninitialized data, this field should be 0.





24 4 PointerToRelocations

File pointer to beginning of relocation entries for the section. Set to 0 for executable images or if there are no relocations.





28 4 PointerToLinenumbers

File pointer to beginning of line-number entries for the section. Set to 0 if there are no COFF line numbers.





32 2 NumberOfRelocations

Number of relocation entries for the section. Set to 0 for executable images.





34 2 NumberOfLinenumbers

Number of line-number entries for the section.





36 4 Characteristics

Flags describing sections characteristics.