hello_world_len
points to the special st_shndx == SHN_ABS == 0xF1FF
.0xF1FF
is chosen so as to not conflict with other sections.st_value == 0xD == 13
which is the value we have stored there on the assembly: the length of the string Hello World!
.This means that relocation will not affect this value: it is a constant.
This is small optimization that our assembler does for us and which has ELF support.
If we had used the address of
hello_world_len
anywhere, the assembler would not have been able to mark it as SHN_ABS
, and the linker would have extra relocation work on it later.