Próbuję uzyskać poprawne przesunięcie nazwy sekcji, uzyskując dostęp do elementu 018 pliku elfa, ale nadal daje mi zero lub zero ...Pobieranie elementu sh_name w pliku nagłówka sekcji
mam używać tylko mmap()
i elf.h
- funkcje pomocnicze nie
Więc zrobiłem:
void* map_start = mmap(0, fd_stat.st_size, PROT_READ | PROT_WRITE , MAP_SHARED, fd, 0))
header = (Elf32_Ehdr *) map_start;
secoff = header->e_shoff;
section = (Elf32_Shdr *)(map_start + secoff);
ale kiedy zrobić:
printf("name offset = %d\n", (section->sh_name));
to daje mi 0 ... co robię źle?
Wiem, że ma to być przesunięcie, ale czy nie należy drukować przesunięcia jako int, gdy umieszczam w printf? jak wydrukować wartość - w jakikolwiek sposób reprezentowany? również, w jaki sposób uzyskać rzeczywistą nazwę - wiem, że uzyskać przesunięcie do konkretnej sekcji w .shstrtab - ale czy mogę wydrukować nazwę? Mam na myśli, w jaki sposób odnoszą się do tabeli ciągów? próbowałem zrobić coś takiego jak printf ("% s", sction + header.shstrtab [nameoffset]); ale to nie działało dla mnie ... – user1431301
@ user1431301 Zobacz aktualizację. –
@EmployedRussian: Czy możesz podać przykład odwrotnej strony, np. Przykład kodu, jak utworzyć tabelę ciągów, a następnie sekcję z pewnymi wartościami? –