2016-12-22 6 views
0

Я хочу получить доступ к Системной модели, чтобы получить ID основного регистра.Как установить SWI-обработчик в приложении android

форма, что я учусь, там должно быть три шага:

  1. войти в режим супервизора из режима пользователя через SWI инструкция
  2. переключатель в режим системы с помощью MSR инструкции в режиме супервизора
  3. получить Main Идентификатор регистра в системном режиме, введите следующий код:

    MRC p15, 0, R0, c0, c0, 0 
    

Я хочу, чтобы это произошло в ОС Android. Точно, я хочу получить Main Register ID, когда мое приложение запущено.

Теперь я застрял в том, как установить мой SWI-обработчик.

В соответствии с ARM doc, когда я тестирую его на Android, создаст исключение.

ли кто-то встретил ту же проблему и решить ее в конце концов помочь ~

пс:

/* 
* my install handler code 
*/ 
unsigned installHandler(unsigned location, unsigned *vector) { 
    unsigned vec, oldVec; 
    vec = (location - (unsigned) vector - 0x8) | 0xe59ff000; 
    oldVec = *vector; 
    *vector = vec; 
    return oldVec; 
} 
+1

Я полагаю, что ОС Android не позволяет приложениям устанавливать SWI-обработчики, так как это нарушит модель безопасности. Приложения не должны иметь возможность запускать собственный код в режиме супервизора. Также обратите внимание, что у его ОС, вероятно, уже будет установлен обработчик SWI для обработки системных вызовов. –

ответ

3

То, что вы пытаетесь сделать, это неправильно во многих отношениях.


Цитируя тот же документ, связанный:

Когда инструкция SWI выполняется, то процессор переходит в режиме супервизора

Теперь предположим, что любое приложение может установить обработчик SWI, это эквивалентно тому, что любое приложение может работать в режиме супервизора.
В свою очередь это эквивалентно утверждению, что приложение является частью ОС и, следовательно, может обойти защиту.

Итак, J.Doe, которые хотят зарабатывать деньги, пишет приложение, что каждый из них блокирует ваш телефон, он звонит в premium-rate number, тем самым истощая ваш кредит и зарабатывая деньги.
Он может это сделать, поскольку ОС может это сделать, а приложения - ОС, не так ли?
Также ОС не может остановить это приложение, поскольку оно не имеет больше привилегий.

Это не было бы хорошо, и именно поэтому операционка, особенно мобильные операционки, имеет защиту и четкое различие между пользовательским режимом и режимомсупервизором.
Приложение запускается в пользовательском режиме, так что ОС может изолировать их.


То, что вы делали, также неверно с точки зрения низкого уровня.
Вы пытались установить обработчик SWI с помощью метода PC нагрузки

С помощью этого метода, программный счетчик принудительно непосредственно на адрес обработчика по:

  • хранения абсолютный адрес обработчик в подходящей ячейке памяти (в пределах 4 КБ векторного адреса)
  • размещение инструкции в векторе, который загружает программный счетчик с содержимым выбранной ячейки памяти.

Так location аргумент (который должен быть указателем, а не целое) это адрес, где записан полный адрес обработчика, а не адрес обработчика.
Но, возможно, вы уже знали это, но есть еще одна ошибка, о которой нужно знать.

SWI-обработчик уникален для каждой возможной функции, выставленной swi, общая реализация считывает команду swi и на основе ее «комментариев» бит переходит к правильной функции.
Проще говоря, даже если бы можно было установить SWI-обработчик, он заменил бы ОС один, что не хорошо.


Вы, вероятно, столкнулись с XY problem, ни один здравомыслящий пользователи не даст доступ приложение привилегированным регистра именно потому, что они предназначены, чтобы быть полезным только для системных программистов.

Некоторые из них могут содержать конфиденциальную информацию, которая не распространяется на приложения пользовательского режима, если ОС решит, что действительно такая информация может быть раскрыта, она предложит правильный интерфейс для ее чтения.
Android - это Linux, проверьте файловую систему /proc и аналогичный, чтобы узнать, можете ли вы найти то, что ищете.

+0

Спасибо за ваше терпение. Это очень полезно. В то же время я понял, что описание проблемы может вызвать проблему XY. На самом деле, я хочу задать **, чтобы найти способ получить ID основного регистра на платформе ARM в приложении Android **. Прежде чем я увидел ваш ответ, я считаю, что шаги, которые я описал в основном содержании, - лучший способ. Однако это тупик. В конце концов, я все еще задаюсь вопросом, есть ли способ, чтобы это произошло. – saisam

+0

@saisam, что вы хотите, когда ваше приложение работает на платформе Android без ARM? –

+0

@lan Cook просто игнорирует это в этом случае. – saisam

 Смежные вопросы

  • Нет связанных вопросов^_^