Я пытаюсь перекодировать 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++;
}
}