メインモデルIDを取得するには、システムモデルにアクセスする必要があります。アンドロイドアプリでSWI Handlerをインストールするには
フォーム私が学んだこと、三つのステップがあるはず:
取得スーパバイザモードでメインをMSR
命令を使用して
- ユーザモードからスーパーバイザモードに入り、システムモードに切り替え
- 命令
SWI
てシステムモードでのレジスタIDは、次のコードを呼び出します。MRC p15, 0, R0, c0, c0, 0
Android OSでこれを実現したいと思います。正確には、私のアプリケーションが実行されているときにメインレジスタIDを取得したい。
私はSWIハンドラをインストールする方法を勉強しました。
ARM docによると、Androidでテストすると、例外が作成されます。
誰かが同じ問題に出会い、最後にそれを解決しています〜
PS助ける:?何をしようとする
/*
* 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;
}
私の推測では、Android OSはアプリケーションがSWIハンドラをインストールすることを許可しないため、セキュリティモデルが壊れる可能性があります。アプリケーションはスーパーバイザモードで独自のコードを実行することはできません。また、OSにはすでにシステムコールを処理するためにSWIハンドラがインストールされている可能性があります。 –