检查二进制文件的内容是否在部分/整个二进制文件中(C lang)

时间:2021-05-10 16:47:33

标签: c binaryfiles

我有两个文件:

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

我想检查 contentFile 的内容是否在 (/part of) fileToScan 中。 有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

“简单”解决方案:

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

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

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

相关问题