obecnie Piszę mały program, który odczytuje elf nagłówek pliku i drukuje informacjeReading ELF nagłówek w C
Mam unsigned char wskaźnik zwany buf, która wskazuje lokalizację, w której plik elf znajduje się w pamięci (I używany mmap mapować go do pamięci), a następnie I typecast go do właściwego elf wskaźnik nagłówka
Elf32_Ehdr *ehdr = (Elf32_Ehdr *)buf;
Po tym chcę uzyskać adres tabeli nagłówka programu, robię to jak ten
Elf32_Phdr *ptbl = (Elf32_Phdr *) (buf + ehdr->e_phoff)
Jak zauważył wartość wskaźnika ptbl nie zmienia i gdy próbuję wydrukować wartość członka e_phoff jak ten
fprintf(stdout , "Offset of program headers : %d\n", ehdr->e_phoff);
uzyskać zerowy same rzeczy się dzieje, gdy próbuję wydrukować numer programu nagłówki i liczba nagłówków sekcji - zawsze otrzymujemy zero Jeśli używam linux readelf, drukuje odpowiednie wartości Czy ktoś doświadczył tego samego problemu?
Myślę, że znalazłem problem, używam maszyny 64-bitowej, więc właśnie zmieniłem Elf32_Phdr na Elf64_Phdr i zadziałało –
Śmiało odpowiesz na własne pytanie. Jest to ważne, jeśli znajdziesz odpowiedź w pierwszej kolejności. Oczywiście używałeś niewłaściwego typu wskaźnika struktury, więc odwoływałeś się do pamięci w stosunku do zamierzonego. –
Proponuję użyć libelf. –