检查二进制文件的内容是否在 part/whole 二进制文件中 (C lang)

Check if a content of a binary file is in a part/whole binary file (C lang)

我有两个文件:

    FILE* fileToScan = fopen("c:/fileToScan.png", "rb");
    FILE* contentFile = fopen("c:/virusFile.jpg", "rb");

我想检查 contentFile 的内容是否在(/部分)fileToScan 中。 有帮助吗?

“简单”解决方案:

  1. 读取整个文件以在内存中扫描。您可以使用大小为 size_t haystack_len;
  2. 的变量 char *haystack;
  3. 读取内存中的整个内容文件。您可以使用大小为 size_t needle_len;
  4. 的变量 char *needle;
  5. 运行 大海捞针 memchr() 使用第一个字符 needle
  6. 如果找到第一个字符,请从该点开始尝试 memcmp()
  7. 如果 memcmp() 失败,您可以将 haystack 指针更新为 memchr() 结果之后的指针,然后返回步骤 3

这根本没有使用任何优化!您肯定会找到更好的实现,例如 the glibc one.

如果文件不适合内存,事情会变得更难。你基本上需要分块工作。