Извлечь двоичный файл Objective-c

#objective-c #ios #binary #extract

#objective-c #iOS #двоичный файл #извлечение

Вопрос:

Возможно ли извлечь двоичный файл, чтобы получить код, который находится за двоичным файлом? С помощью Class-dump вы можете видеть адреса реализации, но возможно ли также увидеть код, который содержится в адресах реализации? Есть ли какой-нибудь способ сделать это?

Комментарии:

1. Разборка с помощью otool -tV. И обязательно потренируйтесь в сборке.

Ответ №1:

Весь ваш код компилируется в отдельные инструкции, размещенные в текстовом разделе вашего исполняемого файла. Компилятор отвечает за перевод вашего языка более высокого уровня в конкретные инструкции процессора, которые проще. Возврат к этому процессу будет практически невозможен, если только код не будет достаточно простым. Некоторые проблемы заключаются в неоднозначности операторов и общей удобочитаемости: например, локальные переменные будут ничем иным, как адресом смещения.

Если вы хотите прочитать дизассемблированный код (инструкции, для которых был скомпилирован код более высокого уровня), используйте эту команду в исполняемом файле:

otool -tV file

Ответ №2:

Вы можете декомпилировать (точнее, разобрать) двоичный файл и получить его сборку, но нет способа вернуть исходный Objective-C.

Мое любопытство умоляет меня спросить, почему вы хотите это сделать !?

Комментарии:

1. Я хочу учиться на коде. Вы можете подумать, что я хочу скопировать код, но это не мое намерение, я хочу посмотреть, как другие делают вещи, о которых я думал целую вечность и не понял, как это сделать.

2. @Maxner: В общем, было бы гораздо лучше просто посмотреть на проекты с открытым исходным кодом и задавать вопросы о том, что вы хотите знать, а не разбирать программы с закрытым исходным кодом. Дизассемблированный код, как правило, совсем не подходит для начинающих.

3. Итак, когда я разобрал двоичный файл, терминал выдает мне тысячи таких строк: 00002134 e58d1024 str r1, [sp, # 36] что я могу с этим сделать? Как я могу получить какую-либо информацию об этом?

4. @Maxner это инструкция сохранения, переданная процессору. Если вы действительно хотите узнать об этом, немного почитайте об архитектуре компьютера. Как сказал Чак, это может быть не лучший путь. PS: именно otool дал вам тысячи строк, а не Terminal.app 🙂 Terminal.app только что показал их вам.

5. @Maxner: ознакомьтесь с этими ссылками, чтобы начать: несколько вещей, которые разработчики iOS должны знать об архитектуре ARM ; Краткий обзор сборки ARM ; Ассемблер ARM .

Ответ №3:

otx http://otx.osxninja.com / является хорошим инструментом для обозначения разборки на основе otool, он будет обрабатывать как разборку x86_64, так и i386.

и

Mach-O-Scope https://github.com/smorr/Mach-O-Scope это инструмент, построенный поверх otx, чтобы выгружать все это в базу данных sqlite3 для просмотра и аннотирования.

Это не даст вам исходный код, но позволит вам довольно близко познакомиться с сообщениями, которые рассылаются в методах.