имеется устройство с процессором arm946es. его родной firmware позволяет запускать бинарные файлы с SD карточки. в результате запуска стартует не родная операционная система, а код из бинарного файла.
цель проекта: запустить процесс в уже работающей операционной системе. для этого код из бинарного файла должен передать управление обратно на ROM, чтобы продолжилась загрузка операционной системы ( скорее всего с этим у нас проблем нет )
вопрос: как к нашему коду вернется управление после старта операционной системы? ответ: используя Protection Unit мы пытаемся не позволить операционной системе установить ее родной abort handler проблема в том, что минимальный размер страницы при использовании Protection Unit - 4kb a нам нужно не позволить записать только 4(8?) байтов в vector table (data abort handler и prefetch abort handler )
тоесть наш обработчик должен иметь возможность узнать, что и куда в этом сегменте пытались записать. если записываемый адрес не наш abort handler - нам нужно записать эти данные как и предполагал их записать "чужой" код. получается, что нам нужен парсер инструкциЙ STR. изобретать велосипед не хочется. скорее всего этот код давно существует. мне не удалось этот код найти. я смотрел проекты: qemu, skyeye, softgun, swarm немного тяжело анализировать такие большие проекты, когда мне всего лишь нужен парсер для двух инструкций STR.
вопрос: где такой код искать, который позволяет узнать, по какому адресу предполагалась запись? также возможно мы используем совершенно не правильный подход для решения нашей проблемы.
выслушаю и приму любые дикие идеи.
|