2017-10-29 7 views
0

認識するマジックナンバーを次の表に示します。ファイルの先頭に、ファイルタイプのCのマジックナンバーをチェックして有効な実行ファイルまたはシェルファイルがあるかどうかをチェック

名マジックナンバー(バイト):

-Executable ASCII characters DEL, ‘E’, ‘L’ and ‘F’ 

-Shell script ASCII characters ‘#’ and ‘!’ 

標準のファイル拡張子は、彼らが魔法の数字が含まれている場合でも優先されます。たとえば、ファイルが.oの場合、ファイルの でも、objectファイルとカウントされます。

私は今まで持っているコードを実装することで幸運を祈ることはできませんでした。数字をチェックしてexeファイルの合計数を追加するようには見えません。ロジックが間違っているか、簡単なチェック方法ですか?

すべてのヘルプは

int main (int argc, char** argv) { 

// 

const unsigned char magic1[4] = {0x7f, 0x45, 0x4c, 0x46}; //DEL, E, L, F 

char *endSlash = strrchr (argv[count], '/'); 
endSlash = endSlash ? endSlash + 1: argv[count]; 
char *endDot = strrchr (endSlash, '.'); 
FILE *file; 

for (count = 1; count < argc; count++) { 
    file = fopen(argv[count], "r"); 

    if (strcmp(endSlash, "Makefile") == 0 || strcmp(endSlash, "makefile") == 0) { 
      Mfile++; 
    } 
    else if (endDot == NULL) { 
      O++; 
    } 
    else if (endDot[1] == 'c' && endDot[2] == 0) { 
      Ccount++; 
    } 
    else if (endDot[1] == 'h' && endDot[2] == 0) { 
     Hcount++; 
    } 
    else if (endDot[1] == 'o' && endDot[2] == 0) { 
     Ocount++; 
    } 
    else if (memcmp(file, magic1, sizeof(magic1)) == 0) { //is this actually checking and comparing bytes of magic1? 
     Execount++; 
    } 
    else { 
     O++; 
    } 
} 
    printf("C source: %d\n", Ccount); 
    printf("C header: %d\n", Hcount); 
    printf("Object: %d\n", Ocount); 
    printf("Make: %d\n", Mfile); 
    printf("Executable: %d\n", Execount); 
    printf("Shell: %d\n", Shcount); 
    printf("Other: %d\n", O); 
+0

のようなものをファイルから4バイトのデータを読み込み、その後、memcmpありませんかあなたはどこのファイルから "魔法"を読み込もうとしていますか? –

+0

@Someprogrammerdude申し訳ありませんが、コードを追加すると迷っています。編集 –

+0

あなたの問題があります。実際には、ファイルからバッファにデータを読み込み*バッファ*の内容をあなたのマジックナンバーと比較する必要があります。 [良い初心者の本](http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list)は、ファイルの読み込み(および書き込み)に必要なすべてを説明する必要があります。 –

答えて

0

を高く評価され、 `file`は何ですか?...この

char buf[4] ; 
fread(buf,sizeof(char),4,file) ; 
memcmp(buf,magic1,sizeof(magic1)); 
関連する問題