⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rom2c.c

📁 思科路由器仿真器,用来仿7200系列得,可以在电脑上模拟路由器-Cisco router simulator, used to fake a 7200 series can be simulated
💻 C
字号:
/* * Cisco 7200 (Predator) simulation platform. * Copyright (c) 2006 Christophe Fillot (cf@utc.fr) */#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/mman.h>#include <signal.h>#include <fcntl.h>#include <assert.h>#include <libelf.h>#include "utils.h"/* Extract ROM code+data from an ELF file and convert it into a C array */int main(int argc,char *argv[]){      unsigned char buffer[8];   m_uint32_t vaddr;   Elf32_Ehdr *ehdr;   Elf32_Phdr *phdr;   Elf *img_elf;   size_t len,clen;   int i,j,fd;   FILE *bfd,*fd_out;   if (argc != 3) {      fprintf(stderr,"Usage: %s <input_file> <output_file>\n",argv[0]);      exit(EXIT_FAILURE);   }   if ((fd = open(argv[1],O_RDONLY)) == -1)      return(-1);   if (elf_version(EV_CURRENT) == EV_NONE) {      fprintf(stderr,"load_elf_image: library out of date\n");      return(-1);   }   if (!(img_elf = elf_begin(fd,ELF_C_READ,NULL))) {      fprintf(stderr,"load_elf_image: elf_begin: %s\n",              elf_errmsg(elf_errno()));      return(-1);   }   if (!(phdr = elf32_getphdr(img_elf))) {      fprintf(stderr,"load_elf_image: elf32_getphdr: %s\n",              elf_errmsg(elf_errno()));      return(-1);   }   if (!(fd_out = fopen(argv[2],"w"))) {      fprintf(stderr,"Unable to create file \"%s\"\n",argv[2]);      exit(EXIT_FAILURE);   }   ehdr = elf32_getehdr(img_elf);   phdr = elf32_getphdr(img_elf);   printf("Extracting ROM from ELF file '%s'...\n",argv[1]);   bfd = fdopen(fd,"r");   if (!bfd) {      perror("load_elf_image: fdopen");      return(-1);   }   for(i=0;i<ehdr->e_phnum;i++,phdr++)   {      fseek(bfd,phdr->p_offset,SEEK_SET);      vaddr = (m_uint64_t)phdr->p_vaddr;      len = phdr->p_filesz;      if (vaddr != 0xbfc00000)         continue;      while(len > 0)      {         clen = fread(buffer,1,sizeof(buffer),bfd);         if (clen == 0)            break;         fprintf(fd_out,"   ");         for(j=0;j<clen;j++)            fprintf(fd_out,"0x%2.2x, ",buffer[j]);         fprintf(fd_out,"\n");         len -= clen;      }   }   fclose(fd_out);   return(0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -