Итак, я пытаюсь разобрать исполняемый файл и сказать, является ли он файлом ELF или нет, вот что я сделал:
uint64_t *mapped_file = mmap(NULL, st.st_size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
if (mapped_file[0] != 0x7f || strcmp(&mapped_file[1], "ELF"))
{
fprintf(stderr, "%s is not an ELF file\n", argv[1]);
exit(EXIT_FAILURE);
}
Поскольку я работаю на 64-битной машине, я считаю, что uint64_t является подходящим типом для возвращаемого значения mmap, однако, когда я делаю это, strcmp завершается неудачно. Мне удалось решить эту проблему, используя вместо этого uint8_t, но я не уверен, что это правильный подход. Есть ли проблемы, если я храню 64-битный адрес в 8-битной переменной?