我需要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"); }