示例#1
0
文件: args.c 项目: MrTchuss/scl
int checkArgs(Flags flags)
{
   /*if( 1 == flags.fret )
   {
      if( 1 != flags.ffileName ) // no ShellCode loaded
      {
         abort_("[!] You must define a shellcode file before resizing it\n");
      }
      if( 8 != strlen(flags.ret) )
      {
         abort_("[!] Return address must be exactly 4 bytes (eight characters)");
      }
      // check the char set for ret:
      if( EXIT_FAILURE == isHexa(flags.ret) )
      {
         abort_("[!] Return address must be hexadecimal format\n");
      }
   }*/
   if( 1 == flags.fbadchar )
   {
      if( 0 != ( strlen(flags.badchar) % 2 ) )
      {
         abort_("[!] Bad chars must be encoded in two digits modes\n");
      }
      if( EXIT_FAILURE == isHexa(flags.badchar) )
      {
         abort_("[!] Bad chars must be encoded in hexa format\n");
      }
   }
   if( 1 == flags.fsize )
   {
      if( 1 != flags.ffileName ) // no ShellCode loaded
      {
         abort_("[!] You must define a shellcode file before resizing it\n");
      }
   }
   if( 1 == flags.fpad )
   {
      if( 1 != flags.fsize )
      {
         abort_("[!] You must define shellcode size before padding it.\n");
      }
   }
   if( 1 == flags.fdisplay )
   {
      if( 1 != flags.ffileName ) // no ShellCode loaded
      {
         abort_("[!] You must define a shellcode file before displaying it\n");
      }
   }
   if( 1 == flags.fexecute )
   {
      if( 1 != flags.ffileName ) // no ShellCode loaded
      {
         abort_("[!] You must define a shellcode file before executing it\n");
      }
   }
   return EXIT_SUCCESS;
}
示例#2
0
double solve(){
	int t;
	double num = 0;


	for(t= 286;;++t){
		num = (double)t*(t+1)/2;
		if (isPenta(num)  && isHexa(num) ){
			return  num;
		}
	}
}
示例#3
0
int readDico(char* dico_name) {
    FILE* dico_file=NULL;
    dico_file = fopen (dico_name, "r");
    if (dico_file == NULL)
    {
        WARNING_MSG("Can't open dictionnary file '%s'",dico_name);
        return 1;
    }
    char line[INPUT_SIZE];
    char normalized_line[INPUT_SIZE];
    int i,j,k;
    do {
        getFromScript(dico_file,line);
        string_standardise(line, normalized_line);
    } while (normalized_line[0]=='\0');
//on obtient le nombre d'entrée du dico
    sscanf(line, "%d",&nbinstr); //retour d'erreur ?
    dico_data=calloc(nbinstr,sizeof(dico_info));
    for ( i = 0; i < nbinstr; ++i)
    {

        k=0;
        do {
            if(feof(dico_file)) {
                WARNING_MSG("End of dictionnary file reached, incorrect number of entry");
                return -1;
            }
            getFromScript(dico_file,line);
            string_standardise(line, normalized_line);
        } while (normalized_line[0]=='\0');
        char* word;
        //printf("%s\n",normalized_line );
        if(nextword(&word, normalized_line,&k)) {
            strcpy(dico_data[i].name,word);
            //	printf("%s\n",dico_data[i].name );
        }
        else {
            ERROR_MSG("Error reading name in dictionnary for entry %d",i);
        }
        if((nextword(&word, normalized_line,&k))&& (isHexa(word))) {
            dico_data[i].mask=strtol(word,NULL,16);
        }                                      //Recuperation du masque
        else {
            ERROR_MSG("Error reading mask in dictionnary for entry %d",i);
        }
        if((nextword(&word, normalized_line,&k))&& (isHexa(word))) {
            dico_data[i].instr=strtol(word,NULL,16);
        }                                 //Recuperation de la signature
        else {
            ERROR_MSG("Error reading instr in dictionnary for entry %d",i);
        }
        if((nextword(&word, normalized_line,&k))) {                                       //Recuperation du type
            if(!strcmp(word,"r")||!strcmp(word,"R")) {
                dico_data[i].type=0;
            }
            else if (!strcmp(word,"i")||!strcmp(word,"I"))
            {
                dico_data[i].type=1;
            }
            else if (!strcmp(word,"j")||!strcmp(word,"J"))
            {
                dico_data[i].type=2;
            }
            else {
                ERROR_MSG("Error reading type in dictionnary for entry %d",i);
            }
        }
        else {
            ERROR_MSG("Error reading type in dictionnary for entry %d",i);
        }
        if((nextword(&word, normalized_line,&k))&& (isDecimal(word))) {
            dico_data[i].nb_arg=strtol(word,NULL,10);
        }                                //Recuperation du nombre d'arguments
        else {
            ERROR_MSG("Error reading number of arg in dictionnary for entry %d",i);
        }
        for (j = 0; j < dico_data[i].nb_arg; ++j)                                         //Boucle
        {
            if((nextword(&word, normalized_line,&k))) {
                //printf("%s,%d,%d\n",word,i,j);

                strcpy(dico_data[i].argname[j],word);                                      //Recuperation de leurs noms
            }
            else {
                ERROR_MSG("Error reading argument dictionnary for entry %d, argument %d",i,j);
            }
        }
        if((nextword(&word, normalized_line,&k))) {
            WARNING_MSG("Too much argument in dictionnary data for instruction %d",i);
        }

//Ajout des pointeurs de fonctions
        if(!strcmp(dico_data[i].name,"ADD")) {
            dico_data[i].exec=ADD;
        }
        if(!strcmp(dico_data[i].name,"ADDI")) {
            dico_data[i].exec=ADDI;
        }
        if(!strcmp(dico_data[i].name,"ADDIU")) {
            dico_data[i].exec=ADDIU;
        }
        if(!strcmp(dico_data[i].name,"ADDU")) {
            dico_data[i].exec=ADDU;
        }
        if(!strcmp(dico_data[i].name,"AND")) {
            dico_data[i].exec=AND;
        }
        if(!strcmp(dico_data[i].name,"ANDI")) {
            dico_data[i].exec=ANDI;
        }
        if(!strcmp(dico_data[i].name,"BEQ")) {
            dico_data[i].exec=BEQ;
        }
        if(!strcmp(dico_data[i].name,"BGEZ")) {
            dico_data[i].exec=BGEZ;
        }
        if(!strcmp(dico_data[i].name,"BGTZ")) {
            dico_data[i].exec=BGTZ;
        }
        if(!strcmp(dico_data[i].name,"BLEZ")) {
            dico_data[i].exec=BLEZ;
        }
        if(!strcmp(dico_data[i].name,"BLTZ")) {
            dico_data[i].exec=BLTZ;
        }
        if(!strcmp(dico_data[i].name,"BNE")) {
            dico_data[i].exec=BNE;
        }
        if(!strcmp(dico_data[i].name,"BREAK")) {
            dico_data[i].exec=BREAKprog;
        }
        if(!strcmp(dico_data[i].name,"DIV")) {
            dico_data[i].exec=DIV;
        }
        if(!strcmp(dico_data[i].name,"J")) {
            dico_data[i].exec=J;
        }
        if(!strcmp(dico_data[i].name,"JAL")) {
            dico_data[i].exec=JAL;
        }
        if(!strcmp(dico_data[i].name,"JALR")) {
            dico_data[i].exec=JALR;
        }
        if(!strcmp(dico_data[i].name,"JR")) {
            dico_data[i].exec=JR;
        }
        if(!strcmp(dico_data[i].name,"LB")) {
            dico_data[i].exec=LB;
        }
        if(!strcmp(dico_data[i].name,"LBU")) {
            dico_data[i].exec=LBU;
        }
        if(!strcmp(dico_data[i].name,"LUI")) {
            dico_data[i].exec=LUI;
        }
        if(!strcmp(dico_data[i].name,"LW")) {
            dico_data[i].exec=LW;
        }
        if(!strcmp(dico_data[i].name,"MFHI")) {
            dico_data[i].exec=MFHI;
        }
        if(!strcmp(dico_data[i].name,"MFLO")) {
            dico_data[i].exec=MFLO;
        }
        if(!strcmp(dico_data[i].name,"MULT")) {
            dico_data[i].exec=MULT;
        }
        if(!strcmp(dico_data[i].name,"NOP")) {
            dico_data[i].exec=NOP;
        }
        if(!strcmp(dico_data[i].name,"OR")) {
            dico_data[i].exec=OR;
        }
        if(!strcmp(dico_data[i].name,"ORI")) {
            dico_data[i].exec=ORI;
        }
        if(!strcmp(dico_data[i].name,"XOR")) {
            dico_data[i].exec=XOR;
        }
        if(!strcmp(dico_data[i].name,"SB")) {
            dico_data[i].exec=SB;
        }
        if(!strcmp(dico_data[i].name,"SW")) {
            dico_data[i].exec=SW;
        }
        if(!strcmp(dico_data[i].name,"SEB")) {
            dico_data[i].exec=SEB;
        }
        if(!strcmp(dico_data[i].name,"SLL")) {
            dico_data[i].exec=SLL;
        }
        if(!strcmp(dico_data[i].name,"SRA")) {
            dico_data[i].exec=SRA;
        }
        if(!strcmp(dico_data[i].name,"SRL")) {
            dico_data[i].exec=SRL;
        }
        if(!strcmp(dico_data[i].name,"SLT")) {
            dico_data[i].exec=SLT;
        }
        if(!strcmp(dico_data[i].name,"SLTI")) {
            dico_data[i].exec=SLTI;
        }
        if(!strcmp(dico_data[i].name,"SLTIU")) {
            dico_data[i].exec=SLTIU;
        }
        if(!strcmp(dico_data[i].name,"SLTU")) {
            dico_data[i].exec=SLTU;
        }
        if(!strcmp(dico_data[i].name,"SUB")) {
            dico_data[i].exec=SUB;
        }
        if(!strcmp(dico_data[i].name,"SUBU")) {
            dico_data[i].exec=SUBU;
        }
        if(!strcmp(dico_data[i].name,"SYSCALL")) {
            dico_data[i].exec=SYSCALL;
        }





    }
    //tri dico pour éviter les mauvaises combi mask/instr,
    // la flemme d'implémenter un tri fusion
    i=0;
    dico_info temp;
    while(i<nbinstr) {
        if (dico_data[i].mask<dico_data[i+1].mask)
        {
            memcpy(&temp,&dico_data[i+1],sizeof(dico_info));
            memcpy(&dico_data[i+1],&dico_data[i],sizeof(dico_info));
            memcpy(&dico_data[i],&temp,sizeof(dico_info));
            i=0;
        }
        else i++;
    }




    return 0;
}