2016-01-23 89 views
1

如何打開文件並將信息複製到另一個文件中。我只需要複製幻數和版本。 void read_header(FILE * file,File * file2);如何在C中讀取ELF標題?

+2

你可以考慮使用ELF庫 - 'libelf'。 –

+0

你到底想要達到什麼目標?將所有信息複製到另一個文件是使用'fread'和'fwrite'完成的 - 只要記住以二進制模式打開即可。 ELF文件與其他二進制文件沒有區別。 – skyking

+0

你不允許改變你的問題的含義。如果您有新問題,應將其作爲新問題發佈,但請務必首先檢查是否已有問題。 –

回答

0

使用fopen()

FILE *fp = fopen("youe_elf.bin","rb"); 

現在使用fread()從文件中讀取數據塊打開您的ELF文件。並與format of ELF file地圖並獲得頭字節,並將它們在新文件中寫入再次使用fopen()

0

您可以檢查ELF頭的結構如何here. 然後您可以創建一個結構來保存你的數據,僅僅是這樣看的:

typedef struct { 
    uint8 e_ident[16]; 
    uint16 e_type; 
    uint16 e_machine; 
    uint32 e_version; 
    uint32 e_entry; 
    uint32 e_phoff; 
    uint32 e_shoff; 
    uint32 e_flags; 
    uint16 e_ehsize; 
    uint16 e_phentsize; 
    uint16 e_phnum; 
    uint16 e_shentsize; 
    uint16 e_shnum; 
    uint16 e_shstrndx; 
} Elf32Hdr; 

void read_elf_header(const char* elfFile, const char* outputFile) { 
    struct Elf32Hdr header; 

    FILE* file = fopen(elfFile, "rb"); 
    if(file) { 
    // read the header 
    fread(&header, 1, sizeof(header), file); 

    // check so its really an elf file 
    if(header.e_ident[0] == 0x7f && 
     header.e_ident[1] == 'E' && 
     header.e_ident[2] == 'L' && 
     header.e_ident[3] == 'F') { 

     // write the header to the output file 
     FILE* fout = fopen(outputFile, "wb"); 
     if(fout) { 
     fwrite(&header, 1, sizeof(header), fout); 
     fclose(fout); 
     } 
    } 

    // finally close the file 
    fclose(file); 
    } 
} 

根據平臺的不同,已經定義此結構的頭文件可能可用。例如,如果您正在運行linux,則可以嘗試包含elf.h

+0

注意:您的平臺*可能*已經在頭文件中定義了這個結構,所以您不需要複製它。但我不記得它叫什麼或哪個標題。 – immibis

2
  1. 包括elf.h中
  2. 開放和統計ELF文件
  3. 地圖文件
  4. 類型轉換映射地址Elf64_Ehdr和閱讀
+0

你不需要打開文件來調用'stat'就可以了。 –