2015-12-13 3 views
2

Разбор уже загруженного двоичного файла Mach-O ...Почему __LINKEDIT иногда выключается 0x1000?

Иногда таблица строк, таблица символов и т. Д., Где они должны быть, а иногда они выключены 0x1000.

Например, я могу запустить свою программу, и baseOffset + cmd->symoff является точной. Затем я буду тестировать блок и baseOffset + cmd->symoff + 0x1000 будет точным. baseOffset всегда действителен и указывает на действительный заголовок Маха.

ответ

2

Я понял это, глядя на dyld исходный код ... Это не guarenteed быть 0x1000 прочь, однако, связь редактировать смещение: baseImageOffset + linkedit.vmaddr - linkedit.fileoff. Большую часть времени это различие равно 0, но иногда это не так.

Это воздействие LC_FUNCTION_STARTS (Cmd-> dataoff) и LC_SYMTAB (Cmd-> stroff и Cmd-> symoff)