attualmente sto scrivendo piccolo programma che legge intestazione del file elfo e stampa alcune informazioniReading ELF in C
Ho un puntatore unsigned char chiamato buf che indica la posizione in cui file di elfo si trova in memoria (I usato mmap per mappare a memoria), poi ho typecast a un corretto puntatore intestazione elfo
Elf32_Ehdr *ehdr = (Elf32_Ehdr *)buf;
Dopo questo, io voglio ottenere un indirizzo della tabella intestazione del programma, lo faccio come questo
Elf32_Phdr *ptbl = (Elf32_Phdr *) (buf + ehdr->e_phoff)
Come ho notato il valore del puntatore PTBL non cambia e quando provo a stampare il valore del membro e_phoff come questo
fprintf(stdout , "Offset of program headers : %d\n", ehdr->e_phoff);
ottengo a zero stessa roba accade quando si tenta di stampare il numero di programma intestazioni e numero di sezione headers - diventano sempre zero Se io uso linux readelf, stampa i valori corretti qualcuno sperimentato lo stesso problema?
Penso di aver trovato il problema, sto usando una macchina a 64 bit, quindi ho appena cambiato Elf32_Phdr in Elf64_Phdr e ha funzionato –
Vai avanti e rispondi alla tua stessa domanda. È una cosa valida da fare, se trovi prima la risposta. Ovviamente, è stato utilizzato il tipo di puntatore struct sbagliato, quindi si stava riferendo la memoria a monte di quello previsto. –
Suggerisco di usare libelf. –