Каким будет лучший способ вставки функциональности в двоичное приложение (3d-участник, закрытый источник).
Целевое приложение находится на OSX и, похоже, скомпилировано с использованием gcc 3+. Я могу видеть список функций, реализованных в двоичном формате, и отлаживать и изолировать одну конкретную функцию, которую я хотел бы удаленно вызвать.
В частности, я хотел бы назвать эту функцию - позвольте ей void zoomByFactor(x,y)
- когда я получу определенные данные из сложного HIDevice.
Я могу легко модифицировать или вводить инструкции в сам файл двоичного файла (т.е. исправление не должно происходить только в ОЗУ).
Что бы вы порекомендовали как способ "красиво" сделать это?
Edit:
Мне действительно нужно полное приложение. Поэтому я не могу бросить его и использовать библиотеку. (Для тех, кто нуждается в этическом объяснении: это проприетарная часть программного обеспечения САПР, чей веб-сайт компании не обновлялся с 2006 года. Я заплатил за этот продукт (довольно много денег за то, что он есть), и у него есть проект данные, которые я не могу легко уйти от него. Продукт подходит мне как можно лучше, но я хочу использовать новый HID, который я недавно получил. Я изучил внутренности приложения, и я довольно уверен что я могу вызвать правильную функцию с соответствующими данными и заставить ее работать правильно).
Вот что я сделал до сих пор, и это довольно gheto.
Я уже модифицировал части приложения через этот процесс:
xxd -g 0 binary > binary.hex cat binary.hex | awk 'substitute work' > modified.hex xxd -r modified.hex > newbinary chmod 777 newbinary
Я делаю такого рода прыжки через обручи, потому что бинарный файл имеет почти 100 мегабайт.
Суть того, что я думаю, это то, что я буду jmp где-то в главном цикле приложения, запустите поток и вернусь к основной функции.
Теперь вопросы: где я могу вставить новый код? мне нужно изменить таблицы символов? в качестве альтернативы, как я могу сделать загрузку dylib автоматически, так что единственное "взлом", которое мне нужно сделать, это вставить вызов нормально загруженного dylib в основную функцию?