devmem: '/dev/mem' を開けません: 権限が拒否されました

devmem: '/dev/mem' を開けません: 権限が拒否されました

私はすでにルート化してルート アクセス権を持っている 2 台の電話 (Samsung Galaxy S4 LTE I9505、Android 4.4.2 Kitkat) を持っています。以前は、Android 4.1.2 Jelly Bean を実行しているルート化された Samsung Galaxy S3 LTE I9505 で、/dev/mem の dd を介してデバイス メモリの一部を取得できました。

私は、携帯電話で実行中のカーネルのリバース エンジニアリングを行うために、RAM のカーネル コード部分を取得することに興味があり、カーネル コードが配置されているアドレスの範囲を正確に把握しています (cat /proc/iomem を使用)。ただし、Kitkat 4.4.2 を実行している 2 S4 で、adb シェル (su を使用) を使用すると、携帯電話にマウントされている /dev/mem を確認できません。「cat /dev/mem」または「busybox devmem 0x80208000」を使用しようとすると、アクセス許可が拒否されたというエラーが発生します。

ただし、ルート エクスプローラーを有効にして ES ファイル エクスプローラーを使用すると、/dev 内の mem と kmem の両方が表示されます。この問題の対処方法をご存知の方はいませんか? メモリをオンザフライで編集するには、busybox のコマンド devmem を使用して /dev/mem にアクセスする必要があります。

'cat /dev/mem' の出力:

1|root@jflte:/ # cat /dev/mem | wc                                             
tmp-mksh: cat: /dev/mem: Permission denied
    0         0         0

'busybox devmem' の出力:

root@jflte:/ # busybox devmem 0x80208000 16
devmem: can't open '/dev/mem': Permission denied

答え1

4.4.2 では (少なくとも Samsung S4 では)、Selinux が Enforcing に設定されているため、/dev/mem を一覧表示したり読み取ったりすることができません。

電話をルート化しているので、ADB シェルから 'su' に入り、'getenforce' コマンドを使用すると、'Enforcing' が返されるはずです。'setenforce 0' を使用して Selinux を一時的に無効にすると、Selinux モードが Permissive に変更され、/dev/mem の読み取りまたは一覧表示が可能になります。

関連情報