У меня есть 2 телефона (Samsung Galaxy S4 LTE I9505, Android 4.4.2 Kitkat), которые я уже рутировал и имею доступ к ним. Ранее, на моем рутированном Samsung Galaxy S3 LTE I9505 с Android 4.1.2 Jelly Bean, я мог получить части памяти устройства через добавление /dev/mem.
Мне интересно получить часть кода ядра оперативной памяти, чтобы выполнить обратную разработку работающего ядра телефона, и я точно знаю диапазон адресов, где находится код ядра (через использование cat /proc/iomem). Однако на 2 S4 под управлением Kitkat 4.4.2, когда я использую оболочку adb (с su), я не могу увидеть /dev/mem, смонтированный на телефоне. Когда я пытаюсь использовать 'cat /dev/mem' или 'busybox devmem 0x80208000', я получаю ошибку отказа в доступе.
Однако, когда я использую ES File Explorer с включенным Root Explorer, я могу видеть и mem, и kmem внутри /dev. Кто-нибудь знает, как справиться с этой проблемой? Мне нужно получить доступ к /dev/mem с помощью команды busybox devmem, чтобы редактировать память на лету.
Вывод '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 или даже прочитать его.
Так как вы получили root-доступ к телефону, из оболочки ADB перейдите в 'su' и используйте команду 'getenforce', она должна вернуть вам 'Enforcing'. Вы можете временно отключить Selinux, используя 'setenforce 0', что изменит режим Selinux на Permissive, и вы сможете читать или просматривать /dev/mem