私は、メモリマッピングmmap
を使用して、基本的なnm
を実装するプロジェクトに取り組んでいます。私は、コードを使用して、64ビットのバイナリを解析することができた:ユニバーサル/ファットバイナリファイルの解析
void handle_64(char *ptr)
{
int ncmds;
struct mach_header_64 *header;
struct load_command *lc;
struct symtab_command *sym;
int i;
i = 0;
header = (struct mach_header_64 *)ptr;
ncmds = header->ncmds;
lc = (void *)ptr + sizeof(*header);
while (i < ncmds)
{
if (lc->cmd == LC_SYMTAB)
{
sym = (struct symtab_command *)lc;
build_list (sym->nsyms, sym->symoff, sym->stroff, ptr);
break;
}
lc = (void *) lc + lc->cmdsize;
i++;
}
}
このlinkによれば、マッハ - Oおよび脂肪バイナリの唯一の違いは、その上fat_header
構造体であるが、単に
lc = (void *)ptr + sizeof(struct fat_header) + sizeof(struct mach_header_64);
私はload_command領域(segfault)に移動しません。 fat/universalバイナリのloadコマンドにアクセスするにはどうしたらいいですか?
私はMacOS High Sierraを実行している64ビットMacで作業しています。ありがとうございました。