2 * extract elecard efp files
4 * author: hackbard@hackdaworld.org
6 * build: gcc -Wall efp_extract -o efp_extract
7 * usage: ./efp_extract file.efp
10 * based on info from Muart232
11 * http://www.mikrocontroller.net/topic/210759
14 * http://www.elecard.com/forum/index.php?topic=4174.0
20 #include <sys/types.h>
25 int getbytes(int fd,char *buf,int len) {
31 ret=read(fd,buf+len-cnt,cnt);
38 int hexprint(char *buf,int len) {
43 printf("%02x ",*(buf+i));
50 int main(int argc,char **argv) {
55 unsigned int index[16],offset[16],len[16],wtf[16];
59 fd=open(argv[1],O_RDONLY);
65 lseek(fd,12,SEEK_CUR);
66 // ignore first 12 bytes
69 nof=*((unsigned int *)buf);
71 printf("number of files: %d\n",nof);
78 index[i]=*((unsigned int *)buf);
81 wtf[i]=*((unsigned int *)buf);
84 len[i]=*((unsigned int *)buf);
87 offset[i]=*((unsigned int *)buf);
92 printf("file %u:\n",index[i]);
93 printf(" - wtf: %u\n",wtf[i]);
94 printf(" - len: %u\n",len[i]);
95 printf(" - offset: %u\n",offset[i]);
96 printf(" - next estimated offset: %u\n",len[i]+offset[i]);
100 printf("mapping file into memory ...\n");
101 map=mmap(0,offset[nof-1]+len[nof-1],PROT_READ,MAP_SHARED,fd,0);
105 snprintf(filename,128,"file_%02d",index[i]);
107 wfd=open(filename,O_WRONLY|O_CREAT);
115 ret=write(wfd,map+offset[i]+len[i]-cnt,cnt);