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

📄 main.c

📁 一个linux下的二进制文件工具
💻 C
📖 第 1 页 / 共 3 页
字号:
					free(searchstring);					searchstring=input2(parent_window,wtop+2,wleft+2,29,s,255,0,0);					free(s);					}			}			if (m==1) return KEY_F(5);			if (m==2) return KEY_F(6);			if (m==3) writesearch=1-writesearch;			if (m==4) 			{				doit=1;				while ((strcmp(readsearchfilename,writesearchfilename)==0 && strlen(readsearchfilename)>0) || (doit==1))					{					doit=0;					s=malloc(strlen(writesearchfilename)+1);					strncpy(s,writesearchfilename,strlen(writesearchfilename)+1);					free(writesearchfilename);					writesearchfilename=input2(parent_window,wtop+7,wleft+3,28,s,255,0,0);					free(s);					wattrset(parent_window,attrs[COLOR_TEXT]);					mvwprintw(parent_window,wtop+10,wleft+2,"Please choose a different name");				} 			}			if (m==5) readsearch=1-readsearch;			if (m==6) 			{				doit=1;				while ((strcmp(readsearchfilename,writesearchfilename)==0 && strlen(readsearchfilename)>0) || (doit==1))					{					doit=0;					s=input2(parent_window,wtop+9,wleft+3,28,readsearchfilename,255,0,0);					free(readsearchfilename);					readsearchfilename=malloc(strlen(s));					strncpy(readsearchfilename,s,strlen(s)+1);					free(s);					wattrset(parent_window,attrs[COLOR_TEXT]);					mvwprintw(parent_window,wtop+10,wleft+2,"Please choose a different name");				}			}			if (m==4 || m==6)			{				wattrset(parent_window,attrs[COLOR_FRAME]);				mvwprintw(parent_window,wtop+10,wleft+2,"                              ");			}					}			}	return 0;}int gotowhere( WINDOW* parent_window,	           file_position_t ap, 	           file_position_t ap2,			   file_position_t filesize){	int wtop;	int wbot;	int wleft;	int wright;	char* s;	file_position_t value;	int m;	unsigned int i;	int plus=0;	int minus=0;	wtop=LINES/2-3;	wbot=wtop+5;	wleft=COLS/2-16;	wright=wleft+33;	new_menu(0);	menu_item(1,wtop+4,wleft+1,"%To:",'t','T',0);	menu_item(2,wtop+4,wleft+21,"%%Goto",'g','G',0);	menu_item(0,wtop+4,wright-6,"%%Cancel",'c','C',0);		if (LINES>9 && COLS>32)	{		draw_frame(parent_window,wtop,wleft,wbot,wright,' ');		headline(parent_window,wtop,wleft,"GOTO");		wattrset(parent_window,attrs[COLOR_TEXT]);		mvwprintw(parent_window,wtop+1,wleft+1,"Goto where? (Enter +x or -x to");		mvwprintw(parent_window,wtop+2,wleft+1,"jump relative to your position)");		m=1;		while (m==1)		{			wattrset(parent_window,attrs[COLOR_BRACKETS]);			mvwprintw(parent_window,wtop+4,wleft+5,"[           ]");				wattrset(parent_window,attrs[COLOR_TEXT]);			mvwprintw(parent_window,wtop+4,wleft+6,"%11X",ap);				m=menu_show(parent_window);						if (m==1)			{//				s=input2(parent_window,wtop+4,wleft+6,11,tohex2(ap2,10),11,0,0);// TODO: er zeigt mir hier mist an. warum??				s=input2(parent_window,wtop+4,wleft+6,11,"\0",11,0,0);// TODO: er zeigt mir hier mist an. warum??				plus=0;				minus=0;				value=(int)stohex(s);				for (i=0;i<strlen(s);i++)				{					if (s[i]=='-' || s[i]=='m') {value=ap2-value;i=20;}					if (s[i]=='+' || s[i]=='p') {value=ap2+value;i=20;}				}				if (value<=filesize) ap=value;				free(s);			} else if (m==0) ap=ap2;		}		erase_frame(parent_window,wtop,wleft,wbot,wright,' ');	}	return ap;	}//#ifndef fpos_t//#define fpos_t file_position_t//#endifint main(int argc,char *argv[]){	int hexnotasc=1;	int ch;	int ch2=0;	file_position_t p=0;	file_position_t cp=p;	file_position_t filesize;	file_position_t rfilesize;	file_position_t filesize2 = 0;	file_position_t rfilesize2;	file_position_t ap2;    	fpos_t help;	unsigned char c1,c2;	file_position_t tmpp;	unsigned int i;	int j;		searchstring=malloc(1);	writesearchfilename=malloc(1);	readsearchfilename=malloc(1);	searchstring[0]=0;	writesearchfilename[0]=0;	readsearchfilename[0]=0;	if (argc<2)	{		fprintf(stderr,"Please run with %s [inputfile] or %s [inputfile] [diffile]\n",argv[0],argv[0]);		exit(1);	}	if ((strcmp(argv[1],"-gpl")==0)||(strcmp(argv[1],"-GPL")==0)) {		print_gpl();			exit(0);	}	inputfile=fopen(argv[1],"r");	if (inputfile==NULL) 	{		fprintf(stderr,"Error opening inputfile [%s]\n",argv[1]);		exit(1);	}	fseek(inputfile,0,SEEK_END);	fgetpos(inputfile, &help);#ifdef LINUX	filesize = *((file_position_t*) &help);#else	filesize=(file_position_t)help;#endif//	filesize=100;	rfilesize=filesize;	fseek(inputfile,0,SEEK_SET);	if (argc>=3)	{		inputfile2=fopen(argv[2],"r");		if (inputfile2==NULL) 		{			fprintf(stderr,"Error opening diffile [%s]\n",argv[2]);			exit(1);		}		fseek(inputfile2,0,SEEK_END);		fgetpos(inputfile2,&help);#ifdef LINUX		filesize2= *((file_position_t*) &help);#else		filesize2= (file_position_t) help;#endif		rfilesize2=filesize2;		fseek(inputfile2,0,SEEK_SET);		diffnotedit=1;	}//	while (!feof(inputfile)) fgets(NULL,1000,inputfile);	uimain();	//init();	wclear(stdscr);	wrefresh(stdscr);		init_colors();	wattrset(stdscr,attrs[COLOR_HEXFIELD]);	for (i=1; (int) i < LINES-1;i++) {	  for (j=0; j < COLS;j++) {		mvwprintw(stdscr,i,j," ");	  }	}		for (;;)	{			draw_mainheadline(stdscr,0,argv[1]);		wattrset(stdscr,attrs[COLOR_HEXFIELD]);		if (diffnotedit==0) {		  print_hex(stdscr,p,cp,filesize,rfilesize,hexnotasc,ch2); 		} else {		  print_hex_diff(stdscr,p,p,filesize,filesize2,argv[2]);		}		draw_menu(stdscr);		ch=getch2();		if (hexnotasc==1)		{			if (ch=='!') ch=KEY_F(1);			if (ch=='@') ch=KEY_F(2);			if (ch=='#') ch=KEY_F(3);			if (ch=='%') ch=KEY_F(5);			if (ch=='^') ch=KEY_F(6);			if (ch=='(') ch=KEY_F(9);			if (ch==')') ch=KEY_F(10);			if (ch=='h') ch=KEY_LEFT;			if (ch=='j') ch=KEY_DOWN;			if (ch=='k') ch=KEY_UP;			if (ch=='l') ch=KEY_RIGHT;			if (ch==' ') ch=KEY_NPAGE;		}		if (diffnotedit==1 && ch!=KEY_RETURN && ch!=9 && ch!=KEY_BTAB && ch!=KEY_LEFT && ch!=KEY_RIGHT && ch!=KEY_UP && ch!=KEY_DOWN && ch!=KEY_NPAGE && ch!=KEY_PPAGE && ch!=KEY_F(2) && ch!=KEY_F(3) &&  ch!=KEY_F(10)) ch=0;		if ((hexnotasc==1) && (((ch>='0') && (ch<='9')) || ((ch>='a') && (ch<='f')) || ((ch>='A') && (ch<='F')))) 		{			mvwprintw(stdscr,1,1,"h");			if (ch2==0) 			{								ch2=ch;			} else {				if (ch2<='9') change[chnum]=(ch2-48)<<4;				else if (ch2<='F') change[chnum]=(ch2-55)<<4;				else if (ch2<='f') change[chnum]=(ch2-87)<<4;				if (ch<='9') change[chnum]=change[chnum]+(ch-48);				else if (ch<='F') change[chnum]=change[chnum]+(ch-55);				else if (ch<='f') change[chnum]=change[chnum]+(ch-87);				chpos[chnum]=cp;				chnum++;				ch2=0;				ch=KEY_RIGHT;				if (cp==filesize) filesize++;			}		} else ch2=0;		if ((hexnotasc==0) && (ch>=32) && (ch<=127)) 		{			chpos[chnum]=cp;			change[chnum]=ch;			chnum++;			ch=KEY_RIGHT;		}		if (diffnotedit==0 && (ch==KEY_BTAB || ch==9)) hexnotasc=1-hexnotasc;		if (ch==12 || ch==KEY_F(11) || ch==KEY_REFRESH) {			wattrset(stdscr,attrs[COLOR_HEXFIELD]);			wclear(stdscr);			wrefresh(stdscr);			wattrset(stdscr,attrs[COLOR_HEXFIELD]);			for (i=1; (int) i < LINES-1;i++) {			  for (j=0;j<COLS;j++) {				mvwprintw(stdscr,i,j," ");			  }			}		}		if (diffnotedit==0) 		{		//	if (ch==KEY_LEFT && cp!=0) {cp--;if (cp<p) p--;}			if (ch==KEY_DOWN && cp+cols<filesize) {cp=cp+cols;if (cp>=p+rows*cols) p=p+cols;}			if (ch==KEY_UP && cp>=cols) {			  cp=cp-cols;			  if (cp<p) {				if (p>cols) {				  p=p-cols;				} else {				  p=0;				}			  }			}			if (ch==KEY_PPAGE && cp>=cols*rows) {			  cp=cp-cols*rows;			  if (p>cols*rows) {				p=p-cols*rows; 			  } else {				p = 0;				if (p) {					cp = 0;				}			  }			}			if (ch==KEY_NPAGE && p+cols*rows<=filesize && cp+cols*rows<=filesize+1) {p=p+cols*rows;cp=cp+cols*rows;}		} else {			if (ch==KEY_LEFT && p!=0) {p--;}			if (ch==KEY_DOWN && ((p+cols<filesize) || (p+cols<filesize2))) {p=p+cols;}			if (ch==KEY_UP && p>=cols) {p=p-cols;}			if (ch==KEY_PPAGE && p>=cols*rows/2) {p=p-cols*rows/2;}			if (ch==KEY_NPAGE && ((p+cols*rows/2<=filesize) || (p+cols*rows/2<=filesize2))) {p=p+cols*rows/2;}			if (ch==KEY_RIGHT && ((p<filesize) || (p<filesize2))) p++;			if (ch==KEY_BTAB || ch==9 || ch==KEY_RETURN) 			{				tmpp=p+1;			        fseek(inputfile,tmpp,SEEK_SET);       				fseek(inputfile2,tmpp,SEEK_SET);				c1=0;				c2=0;				while (!feof(inputfile)&&!feof(inputfile2) && (c1==c2))				{					fread(&c1,sizeof(char),1,inputfile);					fread(&c2,sizeof(char),1,inputfile2);					if (!feof(inputfile)&&!feof(inputfile2)) if (c1==c2) tmpp++;				}				if (c1!=c2) p=tmpp;			}		}		if (ch==KEY_F(1))		{			ch=searchfor(stdscr,hexnotasc);		}		if (ch==KEY_F(2))		{			ap2=gotowhere(stdscr,cp,cp,filesize);			if (ap2<=filesize)			{				p=ap2;				cp=ap2;			}//			wclear(stdscr);			wrefresh(stdscr);		}		if (ch==KEY_F(3)) 		{			hexcalc(stdscr);//			wclear(stdscr);//			wrefresh(stdscr);		}		if (ch==KEY_F(5))		{			if (hexnotasc==0) 			{				searchstring2len=strlen(searchstring);				for (i=0;i<strlen(searchstring);i++) {				  searchstring2[i]=(int)searchstring[i];				}							} else {				searchstring2len=searchstring3len;				for (i=0;i<searchstring3len;i++) {				  searchstring2[i]=searchstring3[i];				}			}			if (readsearch==0) {			  cp=searchforwardhex(cp,filesize); 			} else { 			  cp=searchforwardhex2(cp);			}			p=cp;			if (writesearch==1)			{				p=0;				cp=0;			}			ch=KEY_RIGHT;			}		if (ch==KEY_F(6))		{			if (hexnotasc==0) 			{				searchstring2len=strlen(searchstring);				for (i=0;i<strlen(searchstring);i++) searchstring2[i]=(int)searchstring[i];							} else {				searchstring2len=searchstring3len;				for (i=0;i<searchstring3len;i++) searchstring2[i]=searchstring3[i];			}			if (readsearch==0) cp=searchbackwardhex(cp,filesize,hexnotasc); else cp=searchbackwardhex2(cp,filesize);			p=cp;			if (writesearch==1)			{				p=0;				cp=0;			}			ch=KEY_LEFT;						}		if (diffnotedit==0 && ch==KEY_RIGHT && cp<filesize) {cp++; if (cp>=p+rows*cols) p++; }		if (diffnotedit==0 && ch==KEY_LEFT && cp!=0) {cp--;if (cp<p) p--;}		if (ch==KEY_F(9))		{			if (chnum!=0) 			{				if (chpos[chnum-1]>rfilesize) 				{					filesize=rfilesize;					for (i=0; (int) i < chnum-1; i++) {					  if (filesize<chpos[i]) {						filesize=chpos[i]; 					  }					}				}				if (p>chpos[chnum-1] || p+cols*rows<chpos[chnum-1]) p=chpos[chnum-1];				if (cp>chpos[chnum-1] || cp+cols*rows<chpos[chnum-1]) cp=chpos[chnum-1];				if (p>filesize) p=filesize;				if (cp>filesize) cp=filesize;				chnum--;			}		}		if (ch==KEY_F(10)) 		{			if (chnum!=0) exit_yesno(stdscr,argv[1]); else finish(0);//			wclear(stdscr);			wrefresh(stdscr);		}			}}

⌨️ 快捷键说明

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