Доброе утро, переполнение стека!
Я пытаюсь извлечь из двоичного файла шестнадцатеричную строку.Я не могу найти эту строку напрямую, но я знаю, что длина строки 0x30 и начинается 0x10 после известной шестнадцатеричной строки.
Так вот мой код
FILE *f = NULL;
unsigned char *buffer = NULL;
unsigned long fileLen;
unsigned char known_string[] = {0x45, 0x45, 0x45, 0x45};
printf("Opening file...\n");
f = fopen(argv[1], "rb");
if (!f) {
fprintf(stderr, "Unable to open %s\n", argv[1]);
return -1;
}
// Get the length
fseek(f, 0, SEEK_END);
fileLen=ftell(f);
fseek(f, 0, SEEK_SET);
// Allocate memory
buffer=malloc(fileLen);
if (!buffer)
{
fprintf(stderr, "Memory error!\n");
fclose(f);
return -1;
}
// File to buffer
fread(buffer, fileLen, 1, f);
fclose(f);
printf("Buffer starts: %p\n", &buffer[0]);
printf("Buffer ends: %p\n", &buffer[fileLen]);
// Determines offset of known_string
char *p = memmem(buffer, fileLen, bytes, 4);
if (!p) {
return -1;
} else {
printf(" General offset: %x\n", p);
}
free(buffer);
Итакобщее смещение известной строки, но мне нужно получить одно относительно файла.Я немного застрял на этом этапе.Я думаю, что я должен сделать что-то вроде p - & buffer [0], но p и & buffer [0] не одного типа, и p даже не является действительным смещением (например, 678987 вместо 10678987).Тогда в случае, если я получил относительное смещение, как я могу найти неизвестную строку?