检查二进制文件的内容是否在 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 中。
有帮助吗?
“简单”解决方案:
- 读取整个文件以在内存中扫描。您可以使用大小为
size_t haystack_len;
的变量 char *haystack;
- 读取内存中的整个内容文件。您可以使用大小为
size_t needle_len;
的变量 char *needle;
- 运行 大海捞针
memchr()
使用第一个字符 needle
- 如果找到第一个字符,请从该点开始尝试
memcmp()
- 如果
memcmp()
失败,您可以将 haystack 指针更新为 memchr()
结果之后的指针,然后返回步骤 3
这根本没有使用任何优化!您肯定会找到更好的实现,例如 the glibc one.
如果文件不适合内存,事情会变得更难。你基本上需要分块工作。
我有两个文件:
FILE* fileToScan = fopen("c:/fileToScan.png", "rb");
FILE* contentFile = fopen("c:/virusFile.jpg", "rb");
我想检查 contentFile 的内容是否在(/部分)fileToScan 中。 有帮助吗?
“简单”解决方案:
- 读取整个文件以在内存中扫描。您可以使用大小为
size_t haystack_len;
的变量 - 读取内存中的整个内容文件。您可以使用大小为
size_t needle_len;
的变量 - 运行 大海捞针
memchr()
使用第一个字符 needle - 如果找到第一个字符,请从该点开始尝试
memcmp()
- 如果
memcmp()
失败,您可以将 haystack 指针更新为memchr()
结果之后的指针,然后返回步骤 3
char *haystack;
char *needle;
这根本没有使用任何优化!您肯定会找到更好的实现,例如 the glibc one.
如果文件不适合内存,事情会变得更难。你基本上需要分块工作。