扫描文件以获取签名(使用 fread)

Scanning a file for a signature (using fread)

函数的重点是获取2个文件流、一个签名和一个扫描文件。 它应该扫描扫描的文件,如果其中有签名,它将 return 1(文件被感染)。 我尝试使用同一个文件作为两个参数,但它仍然 returned 0,我尝试调试但无法解决问题。

(sizeOfFile 函数 returns 文件的字节大小)

int scanFile(FILE* signatureFile, FILE* scannedFile)
{
    const size_t signatureSize = sizeOfFile(signatureFile);
    const size_t scannedFileSize = sizeOfFile(scannedFile);
    size_t l1 = 0;
    size_t l2 = 0;
    unsigned char currChar = ' ';
    unsigned char currSignatureChar = ' ';
    int i = 0;
    unsigned char signatureFirstChar = fread(&signatureFirstChar, 1, 1, signatureFile);
    if (scannedFileSize >= signatureSize)
    {
        while ((l1 = fread(&currChar, 1, 1, scannedFile)) != 0)
        {
            if (currChar == signatureFirstChar)
            {
                fseek(scannedFile, -1, SEEK_CUR);
                fseek(signatureFile, 0, SEEK_SET);
                currSignatureChar = signatureFirstChar;
                while (currChar == currSignatureChar)
                {
                    if ((l1 = fread(&currChar, 1, 1, scannedFile)) != 0 && (l2 = fread(&currSignatureChar, 1, 1, signatureFile)) != 0)
                    {
                        i++;
                        if (i == signatureSize)
                        {
                            return 1;
                        }
                    }
                    else
                    {
                        break;
                    }
                }
            }
        }

    }
    else
    {
        return 0;
    }
    return 0;
}

如有任何帮助,我们将不胜感激。

fread() 函数 returns 读取的对象数。当您执行

时,您正在将 return 值分配给您的 signatureFirstChar
unsigned char signatureFirstChar = fread(&signatureFirstChar, 1, 1, signatureFile);

改为

unsigned char signatureFirstChar;
fread(&signatureFirstChar, 1, 1, signatureFile);