我需要strstr
和memcmp
之间的东西来检查一个内存范围内是否存在数组。
示例我想要实现的目标:
BYTE a[] = { 0x01, 0x02, 0x03, 0x04 };
BYTE b[] = { 0x02, 0x03 };
if (mem_in_mem(a, b, 4 * sizeof(BYTE)) == 0) {
printf("b is in memory range of a\n");
}
任何想法我怎么能这样的? (应该与Windows一起工作)
函数mem_in_mem
应该取两个数组的大小。这是一个简单的实现:
#include <string.h>
void *mem_in_mem(const void *haystack, size_t n1, const void *needle, size_t n2) {
const unsigned char *p1 = haystack;
const unsigned char *p2 = needle;
if (n2 == 0)
return (void*)p1;
if (n2 > n1)
return NULL;
const unsigned char *p3 = p1 + n1 - n2 + 1;
for (const unsigned char *p = p1; (p = memchr(p, *p2, p3 - p)) != NULL; p++) {
if (!memcmp(p, p2, n2))
return (void*)p;
}
return NULL;
}
你会这样调用它:
BYTE a[] = { 0x01, 0x02, 0x03, 0x04 };
BYTE b[] = { 0x02, 0x03 };
if (mem_in_mem(a, sizeof a, b, sizeof b)) {
printf("b is in memory range of a\n");
}