Developer's Topics
Chapter 8, ELF object files

String table

String table

String table sections hold null-terminated character sequences, commonly called strings. The object file uses these strings to represent symbol and section names. One references a string as an index into the string table section. The first byte, which is index zero, is defined to hold a null character. Likewise, a string table's last byte is defined to hold a null character, ensuring null termination for all strings. A string whose index is zero specifies either no name or a null name, depending on the context. An empty string table section is permitted; its section header's sh_size member would contain zero. Non-zero indexes are invalid for an empty string table.

A section header's sh_name member holds an index into the section header string table section, as designated by the e_shstrndx member of the ELF header. The following figures show a string table with 25 bytes and the strings associated with various indexes.

           Index   +0   +1   +2   +3   +4   +5   +6   +7   +8   +9
                | ---|----|----|----|----|----|----|----|----|----|
             0  |  \0|  n |  a |  m |  e |  . |  \0|  V |  a |  r |
                | ---|----|----|----|----|----|----|----|----|----|
            10  |  i |  a |  b |  l |  e |  \0|  a |  b |  l |  e |
                | ---|----|----|----|----|----|----|----|----|----|
            20  |  \0|  \0|  x |  x |  \0|    |    |    |    |    |
                | ---|----|----|----|----|----|----|----|----|----|

Figure 8-5 String table

Table 8-9 String table indexes

 ---------------------------------------------------------------------
 Index        String
 ---------------------------------------------------------------------
 0            none
 1            name.
 7            Variable
 11           able
 16           able
 24           null string
As the example shows, a string table index may refer to any byte in the section. A string may appear more than once; references to substrings may exist; and a single string may be referenced multiple times. Unreferenced strings also are allowed.