То, что вы пытаетесь сделать, это неправильно во многих отношениях.
Цитируя тот же документ, связанный:
Когда инструкция SWI выполняется, то процессор переходит в режиме супервизора
Теперь предположим, что любое приложение может установить обработчик SWI, это эквивалентно тому, что любое приложение может работать в режиме супервизора.
В свою очередь это эквивалентно утверждению, что приложение является частью ОС и, следовательно, может обойти защиту.
Итак, J.Doe, которые хотят зарабатывать деньги, пишет приложение, что каждый из них блокирует ваш телефон, он звонит в premium-rate number, тем самым истощая ваш кредит и зарабатывая деньги.
Он может это сделать, поскольку ОС может это сделать, а приложения - ОС, не так ли?
Также ОС не может остановить это приложение, поскольку оно не имеет больше привилегий.
Это не было бы хорошо, и именно поэтому операционка, особенно мобильные операционки, имеет защиту и четкое различие между пользовательским режимом и режимомсупервизором.
Приложение запускается в пользовательском режиме, так что ОС может изолировать их.
То, что вы делали, также неверно с точки зрения низкого уровня.
Вы пытались установить обработчик SWI с помощью метода PC нагрузки
С помощью этого метода, программный счетчик принудительно непосредственно на адрес обработчика по:
- хранения абсолютный адрес обработчик в подходящей ячейке памяти (в пределах 4 КБ векторного адреса)
- размещение инструкции в векторе, который загружает программный счетчик с содержимым выбранной ячейки памяти.
Так location
аргумент (который должен быть указателем, а не целое) это адрес, где записан полный адрес обработчика, а не адрес обработчика.
Но, возможно, вы уже знали это, но есть еще одна ошибка, о которой нужно знать.
SWI-обработчик уникален для каждой возможной функции, выставленной swi
, общая реализация считывает команду swi
и на основе ее «комментариев» бит переходит к правильной функции.
Проще говоря, даже если бы можно было установить SWI-обработчик, он заменил бы ОС один, что не хорошо.
Вы, вероятно, столкнулись с XY problem, ни один здравомыслящий пользователи не даст доступ приложение привилегированным регистра именно потому, что они предназначены, чтобы быть полезным только для системных программистов.
Некоторые из них могут содержать конфиденциальную информацию, которая не распространяется на приложения пользовательского режима, если ОС решит, что действительно такая информация может быть раскрыта, она предложит правильный интерфейс для ее чтения.
Android - это Linux, проверьте файловую систему /proc
и аналогичный, чтобы узнать, можете ли вы найти то, что ищете.
Я полагаю, что ОС Android не позволяет приложениям устанавливать SWI-обработчики, так как это нарушит модель безопасности. Приложения не должны иметь возможность запускать собственный код в режиме супервизора. Также обратите внимание, что у его ОС, вероятно, уже будет установлен обработчик SWI для обработки системных вызовов. –