Разбор жирных заголовков файлов объектов mach-o - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь перекодировать nm и пытаюсь разобрать жирные заголовки. Кажется, у меня есть некоторые проблемы со смещением жирной архитектуры. Возможно, я плохо вписался в память, но я не мог этого понять. Мне было интересно, ошибаюсь ли я в том, как я использую свои указатели, или я плохо понимаю, как работают толстые заголовки. Когда я пытаюсь выполнить мою программу с толстым файлом, я получаю хороший вывод для архитектуры ppc, но моя функция проверяет, есть ли допустимый mach_header с определенным смещением, если происходит сбой в архитектуре i386. Вот код Спасибо за вашу помощь.


void                        process_fat_header_32(t_map *file,
                            t_arch *arch, t_header *header)
{
    struct fat_arch     *fat_arch;
    struct fat_header   *fat_header;
    uint32_t            val;
    uint32_t            i;
    const char          *cpu;
    char                *tmp;

    i = 0;
    fat_header = header->fat_header;
    val = should_swap_32(arch, fat_header->nfat_arch);
    fat_arch = (struct fat_arch *)(fat_header + 1);
    while (i < val)
    {
        fat_arch = (void *)file->ptr + sizeof(struct fat_header) +
        (i * sizeof(struct fat_arch));
        cpu = cpu_type_name(should_swap_32(arch, fat_arch->cputype));
        if (!ft_strcmp(cpu, "unknown"))
            return ;
        print_architecture(cpu, file->file[g_idx]);
        printf("offset = %d\n", should_swap_32(arch, fat_arch->offset));
        tmp = file->ptr;
        file->ptr = file->ptr + should_swap_32(arch, fat_arch->offset);
        launch_process(file, arch, header);
        file->ptr = tmp;
        i++;
    }
}

...