реклама на сайте
подробности

 
 
> abort handler. вопрос к гуру: как узнать адрес, куда пишутся данные?
max sagaydachny
сообщение Oct 23 2007, 12:56
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 23-10-07
Пользователь №: 31 645



имеется устройство с процессором 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.

вопрос: где такой код искать, который позволяет узнать, по какому адресу предполагалась запись?
также возможно мы используем совершенно не правильный подход для решения нашей проблемы.


выслушаю и приму любые дикие идеи.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
scifi
сообщение Oct 24 2007, 05:32
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Такая штука реализована в Linux. Ссылка на код есть в этой теме:

http://electronix.ru/forum/index.php?showtopic=36258&hl=
Go to the top of the page
 
+Quote Post
max sagaydachny
сообщение Oct 25 2007, 12:33
Сообщение #3





Группа: Новичок
Сообщений: 5
Регистрация: 23-10-07
Пользователь №: 31 645



scifi - спасибо за идею

defunct

подробнее:

1) штатных средст, позволяющих запустить исполняемый файл из операционной системы - нету
2) можно запустить исполняемый код ВМЕСТО операционной системы.
3) мы предположили, что единственный способ запуска нашего кода внутри операционной системы :
- попытаться запустить операционную систему из нашего кода.
- "что-то" зделать, чтобы операционная система наш код не стерла в оперативной памяти.
- получить "как-то" после запуска операционной системы управление назад на наш код. это позволит нам полноценно использовать все функции операционной системы.


наш еще нереализованный вариант решения данной проблемы:
поставить свой Data Abort Handler и запретить запись на первые 4кб (и на область памяти, в которой находится тело нашего обработчика), чтобы операционная система не смогла поставить свой хандлер.
поэтому на наш хандлер ложится ответственность записи той области памяти внутри наблюдаемого сегмента, которая не затрагивает наш код - эмуляция той инструкции.

поэтому возникла необходимость в дизассемблере той инструкции, которая собиралась выполнить запись.




поскольку у меня знания в области архитектуры ARM не большие , я надеялся услышать альтернативные варианты решения проблемы


PS: операционная система живет в ROM (Flash)

Сообщение отредактировал max sagaydachny - Oct 25 2007, 12:37
Go to the top of the page
 
+Quote Post
defunct
сообщение Oct 25 2007, 13:23
Сообщение #4


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(max sagaydachny @ Oct 25 2007, 15:33) *
наш еще нереализованный вариант решения данной проблемы:
поставить свой Data Abort Handler и запретить запись на первые 4кб (и на область памяти, в которой находится тело нашего обработчика), чтобы операционная система не смогла поставить свой хандлер.
поэтому на наш хандлер ложится ответственность записи той области памяти внутри наблюдаемого сегмента, которая не затрагивает наш код - эмуляция той инструкции.

И что?! Вы думаете достаточно будет только один обработчик подменить?
А IRQ, а FIQ? Для того чтобы не терять контроль над системой вам придется эмулировать не только DABT, а все исключения.
Надеюсь вы понимаете, чем это может грозить системе?

Цитата
поэтому возникла необходимость в дизассемблере той инструкции, которая собиралась выполнить запись.

Это даже не вопрос, просто берете таблицу команд (ARM instruction set) с arm.com, там все расписано.

Цитата
поскольку у меня знания в области архитектуры ARM не большие , я надеялся услышать альтернативные варианты решения проблемы
PS: операционная система живет в ROM (Flash)

Альтернативный и на мой взгляд правильный вариант - подправить ОС так, как требуется для работы вашего проекта, либо взять такой ОС который удовлетворяет вашим требованиям сразу. Раз ОС на Flash, значит перезаписать можно.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- max sagaydachny   abort handler. вопрос к гуру: как узнать адрес, куда пишутся данные?   Oct 23 2007, 12:56
- - defunct   Цитатаa нам нужно не позволить записать только 4(8...   Oct 25 2007, 11:42
- - Dron_Gus   Это уже сродни вирусописательству. Там тоже решают...   Oct 25 2007, 12:40
|- - max sagaydachny   Цитата(Dron_Gus @ Oct 25 2007, 15:40) Это...   Oct 25 2007, 13:28
|- - defunct   Цитата(max sagaydachny @ Oct 25 2007, 16...   Oct 25 2007, 13:32
|- - max sagaydachny   defunct я думаю, что родной дата аборт хандлер там...   Oct 25 2007, 13:50
|- - defunct   Цитата(max sagaydachny @ Oct 25 2007, 16...   Oct 25 2007, 13:54
|- - max sagaydachny   abort handler - это обработчик ситуации, когда сов...   Oct 25 2007, 14:24
|- - defunct   Цитата(max sagaydachny @ Oct 25 2007, 17...   Oct 25 2007, 14:38
- - Dron_Gus   2 defunct На мой взгляд автор хочет подменить Дат...   Oct 25 2007, 14:47
- - defunct   Цитата(Dron_Gus @ Oct 25 2007, 17:47) На ...   Oct 25 2007, 15:22


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th June 2025 - 15:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01382 секунд с 7
ELECTRONIX ©2004-2016