Pytanie do tych co ostro grzebią w Linuxie: Mamy sobie elf.h
a w nim taką oto deklarację:
https://github.com/lattera/glibc/blob/master/elf/elf.h#L873 (i tutaj: https://code.woboq.org/userspace/glibc/elf/elf.h.html)
#define DT_INIT_ARRAY 25 /* Array with addresses of init fct */
#define DT_FINI_ARRAY 26 /* Array with addresses of fini fct */
#define DT_INIT_ARRAYSZ 27 /* Size in bytes of DT_INIT_ARRAY */
#define DT_FINI_ARRAYSZ 28 /* Size in bytes of DT_FINI_ARRAY */
#define DT_RUNPATH 29 /* Library search path */
#define DT_FLAGS 30 /* Flags for the object being loaded */
#define DT_ENCODING 32 /* Start of encoded range */
#define DT_PREINIT_ARRAY 32 /* Array with addresses of preinit fct*/
#define DT_PREINIT_ARRAYSZ 33 /* size in bytes of DT_PREINIT_ARRAY */
#define DT_SYMTAB_SHNDX 34 /* Address of SYMTAB_SHNDX section */
Widać że DT_ENCODING
i DT_PREINIT_ARRAY
dzielą tą samą wartość. Wygląda jakby był błąd i zamiast 32 powinno być 31.
Tyle że ludzie od libc żyją w jaskini i nie ma nawet gdzie zapytać (nie mam ochoty na pałowanie na SO dzisiaj), ani Slacka ani Discord'a tylko lista mailingowa...
Może ktoś bawił się w parsowanie ELFów i wie czy ta deklaracja jest poprawna czy to faktycznie błąd i powinno być 31?