У меня возникли проблемы с изменением двоичного файла в OSX
Итак, я смог добиться успешного исправления текстового раздела двоичного кода с помощью дополнительного кода; хотя под «успешно» я подразумеваю, что такие инструменты, как otool и nm, способны читать в двоичном коде и точно отображать его символы. Поэтому, используя otool -tV в недавно измененном двоичном файле, я вижу, что мой добавленный код без проблем добавлен в текстовый раздел.
Единственная проблема, с которой я столкнулся сейчас, заключается в том, что при попытке выполнить программа всегда вылетает с «ошибкой шины 10».
Так что моя модификация работает так:
I l oop над командами загрузки, пока не найду текстовый сегмент __TEXT, __ / раздел двоичного файла. Оказавшись здесь, я расширяю текстовый раздел на дополнительный размер кода, который я хочу исправить. Когда это будет сделано, все еще в текстовом разделе я перемещаю значения смещения __stubs, __stub_helpers и __const на дополнительный размер Код, который я хочу добавить в текстовый раздел. Когда я попадаю в раздел __cstring (здесь все становится немного сложнее), я ищу (давайте назовем это) энергонезависимую строку, из которой я могу «брать байты»; в общем, если код, который я хочу добавить, скажем, 10 байтов, я нахожу строку в разделе __cstring и уменьшаю ее на 10 байтов, чтобы сбалансировать ее. Строки, на которые я нацеливаюсь - это строки «использования». Строки типа ls, которые имеют значение
usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...]
Это приятно и долго без спецификаторов формата, которые могут помешать. Я бы взял только байты в середине строки, чтобы предотвратить случайное удаление символа \ x00 в конце строки.
После этого мне больше не нужно изменять смещения, так как из-за этого действия я просто уменьшил размер раздела __cstring, и каждый раздел после него теперь правильно выровнен, как это было.
Проблема сейчас заключается в том, что я подозреваю, что мое отсутствие модификации vmaddr и vmsize значения в структурах сегмент_команда_64 (или любые другие значения сопоставления адресов) могут вызывать проблемы с доступом к памяти при попытке выполнить программу.
У меня такой вопрос; при обновлении двоичных файлов OSX чего еще мне не хватало бы в отношении изменений смещения? Прямо сейчас я изменяю только значения прямого смещения двоичного файла, а не его виртуальную адресацию. До сих пор я пытался изменить vmsize сегмента __TEXT, чтобы компенсировать расширение размера раздела __text, но при попытке его запустить мой измененный двоичный файл «убил: 9».
I не знаю, достаточно ли информации для решения этой проблемы; может быть, это простое решение, которое может понять кто-то с большим опытом и навыками /
Вот ссылка на исходный код https://github.com/AlysonBee/OSX_Packer
Цените любую помощь, которую кто-либо может оказать. :)