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

📄 adam2_dump.c

📁 ADAM2 sources (modified by Oleg)
💻 C
字号:
/* File: appmain.c * * Created: Sun Jan 15 18:24:53 2005 * */#include <stdio.h>#include <errno.h>#define ADAM2_MAGIC  0xfeedfa42#define MAGIC_NUMBER 0xc453de23unsigned long app_read_data (FILE *fp, long offset){   unsigned char buf[4];   fseek(fp, offset, SEEK_SET);   fread(buf, 4, 1, fp);   return *((unsigned long*)buf);  /* Indianity hazard ! */};unsigned long app_read_magic (FILE *fp){   return app_read_data(fp, (long) 0);};unsigned long app_read_length (FILE *fp){   return app_read_data(fp, (long) 4);};unsigned long app_read_address (FILE *fp){   return app_read_data(fp, (long) 8);};int  cs_is_tagged(FILE *fp){   unsigned char buf[8];   fseek(fp, -8, SEEK_END);   fread(buf, 8, 1, fp);   if(*(unsigned long*)buf == MAGIC_NUMBER)      return 1;   return 0;};/* --------------------------------------------  --------------------------------------------- */int main(int argc, char **argv){   FILE *fp;   unsigned long magic = 0;   unsigned long address = 0;   unsigned long length = 0;   unsigned long checksum1 = 0;   unsigned long pad = 0;   unsigned long entry = 0;   unsigned long sum = 0;   unsigned char buf[4] = "\x0\x0\x0\x0";   long end_of_code_pos = 0;   long entry_point_pos = 0;   unsigned char code_buf[128];   int code_pos;   unsigned long kernel_address = 0;   long kernel_pos = 0;   long kernel_length = 0;   if(argc != 2)   {      printf("Usage: adam2_dump filename\n\n");      return 1;   }   fp = fopen(argv[1], "r");/* */   printf("\n\tADAM2 application Header:\n\n");   magic=app_read_magic(fp);   printf("ADAM2 Magic= 0x%08x",magic);   if (magic == ADAM2_MAGIC) {      printf (" - GOOD!\n");   } else {      printf (" - BAD!\n");   };   printf("\n\tADAM2 application Record #1 Header:\n\n");   length=app_read_length(fp);   printf("LENGTH   = 0x%08x (%d)\n",length,length);   address=app_read_address(fp);   printf("ADDRESS  = 0x%08x\n",address);   end_of_code_pos=length+(3*4); /* Skip header+code */   if (length>0) {      printf (".......... DATA\n");   };   checksum1=app_read_data(fp, end_of_code_pos);   printf("CHECKSUM = 0x%08x\n",checksum1);   printf("\n\tADAM2 application Record #2 Header:");#if defined DEBUG     printf(" at 0x%08x",end_of_code_pos);#endif   printf ("\n\n");   pad=app_read_data(fp, end_of_code_pos+4);   printf("LENGTH   = 0x%08x\n",pad);   entry=app_read_data(fp, end_of_code_pos+8);   printf("ADDRSESS = 0x%08x (entry point)\n",entry);   sum=app_read_data(fp, end_of_code_pos+0xc);   printf("CHECKSUM = 0x%08x\n",sum);/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   Some MIPS black magic there... */   entry_point_pos = entry - address + (3*4); /* skip header */#if defined DEBUG   printf ("D:Code enrty point position = 0x%08x\n",entry_point_pos);#endif   fseek(fp, entry_point_pos, SEEK_SET);   fread(code_buf, 128, 1, fp);   code_pos=30;/* try to find 0x9402 */   while (code_pos<120) {      if (code_buf[code_pos]==0x02 && code_buf[code_pos+1]==0x94)         { break;         };      code_pos++;   };#if defined DEBUG   printf("D:Found 0x9402 at %x\n",code_pos);#endif   if (code_buf[code_pos+8]==0x00 &&       code_buf[code_pos+9]==0x00 && /*   0x0000 .half */       code_buf[code_pos+6]==0x06 &&       code_buf[code_pos+7]==0x0d )  /*   _jal xxxxxx_ */   {       buf[2] = code_buf[code_pos-8];       buf[3] = code_buf[code_pos-7];       buf[0] = code_buf[code_pos-4];       buf[1] = code_buf[code_pos-3];       if (buf[1]>0x7f) { buf[2]--;}; /*   correct for _addui_ */   };   kernel_address=*((unsigned long*)buf);  /* Indianity hazard ! */#if DEBUG   printf("D:Kernel image address = 0x%08x\n", kernel_address);#endif   kernel_pos = kernel_address - address + (3*4); /* skip header */   if (kernel_address) {      kernel_length=end_of_code_pos - kernel_pos;      printf ("\nCompressed kernel image found!\n");      printf ("Offset = 0x%x (%d), Length = 0x%x (%d)\n", kernel_pos, kernel_pos, kernel_length, kernel_length);      fseek(fp, kernel_pos, SEEK_SET);      fread(code_buf, 128, 1, fp);            if (code_buf[0]=='7' && code_buf[1]=='z') {         printf ("LZMA z7 compressed image.\n" );      } else {         if (code_buf[10]=='z' && code_buf[11]=='i' && code_buf[12]=='m'){            printf ("Zlib compressed image.\n");         } else {            printf ("Unknown image format.\n");         }      }   } else {      printf("\nKernel image not found!\n");   };   if (cs_is_tagged(fp))   {      printf ("File is signed by TI_chksum.\n");   } else {      printf ("File isn't signed by TI_chksum.\n");   };   fclose(fp);   return 0;};

⌨️ 快捷键说明

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