#define BUFSIZE 4096
unsigned char target[] = {0x89, 0x90, 0x91};
unsigned char buf[BUFSIZE];
size_t read;
long offset = 0;
while ((read = fread(buf, 1, BUFSIZE, fp)) > 0) {
for (size_t i = 0; i + sizeof(target) <= read; ++i) {
if (memcmp(buf + i, target, sizeof(target)) == 0) {
printf("Found at 0x%lX\n", offset + i);
return offset + i;
}
}
offset += read;
}
若特征碼橫跨兩次 `fread`,上述會漏檢。解決:保留上一塊尾部 `sizeof(target)-1` 字節拼接到下一塊頭部再查找。