0
我想讀取一個ELF文件的內容到內存中使用C.我目前可以讀取1個程序頭文件很好,但我有一個問題比這更多。在ELF文件中的多個程序頭文件
/* Find and read program headers */
ELFPROGHDR *prgHdr;
fseek(fp, elfhead.phdrpos, SEEK_SET);
prgHdr = (ELFPROGHDR*)malloc(sizeof(ELFPROGHDR)*elfhead.phdrcnt);
if(!prgHdr)
{
fprintf(fp, "Out of Memory\n");
fclose(fp);
return 3;
}
fread(prgHdr, 1, sizeof(ELFPROGHDR)*elfhead.phdrcnt, fp);
printf("Segment-Offset: %x\n", prgHdr->offset);
printf("File-size: %d\n", prgHdr->filesize);
printf("Align: %d\n", prgHdr->align);
/* allocate memory and read in ARM instructions */
for(i = 0; i < elfhead.phdrcnt; i++)
{
armInstructions = (unsigned int *)malloc(prgHdr->filesize + 3 & ~3);
if(armInstructions == NULL)
{
fclose(fp);
free(prgHdr);
fprintf(stderr, "Out of Memory\n");
return 3;
}
fseek(fp, prgHdr->offset, SEEK_SET);
fread(armInstructions, 1, prgHdr->filesize, fp);
/* Disassemble */
printf("\nInstructions\n\n");
Disassemble(armInstructions, (prgHdr->filesize + 3 & ~3) /4, prgHdr->virtaddr);
printf("\n");
free(armInstructions);
}
free(prgHdr);
我想我遇到的問題是與
fseek(fp, elfhead.phdrpos, SEEK_SET);
由於我只求每次第一個程序報頭的開始。我怎麼會這樣,我求第一頭部,然後是第二頭等等的開始,每次..
感謝
改變
感謝您的幫助。雖然有些困惑。你對所有的phdrs說prgHdr = malloc,但後來說反彙編(prghdr [i])。你建議PrgHdr是一個數組還是不是?謝謝 – BradStevenson
「你是在暗示PrgHdr是一個數組還是不是?」 - 請閱讀有關指針運算的知識,例如在這裏:http://www.learncpp.com/cpp-tutorial/68-pointers-arrays-and-pointer-arithmetic/關鍵:「注意*(anArray + 1)與anArray [1]具有相同的效果。 「 –