Enregistrements de certains problèmes liés à l'utilisation de l'outil setpropex

Si vous devez modifier les propriétés système d'Android ro. Type, il existe probablement deux méthodes: l'une consiste à déverrouiller le chargeur de démarrage et à personnaliser votre propre fichier boot.img; l'autre consiste à utiliser l'outil setpropex.

Les deux méthodes nécessitent des privilèges root. La première méthode est plus compliquée, mais l'avantage est que les attributs peuvent être modifiés de manière permanente. La deuxième méthode est très simple, mais elle n'est que temporaire et le redémarrage du système échouera.

J'utilise la deuxième méthode ici, tant que vous exécutez setpropex avec les autorisations root pour définir les propriétés, puis adb root redémarre le démon adb avec les autorisations root, et finalement tue le processus system_server, en attendant qu'il redémarre. Il s'agit de redémarrer Dalvik .

Le processus ci-dessus est théorique, mais j'ai échoué dans le projet d'exploitation réel. Mon environnement de fonctionnement est le Nexus 5 et le système est la version 4.4.4.


Afin de résoudre le problème, j'ai lu le code source de setpropex. Le processus approximatif est de trouver la plage d'adresses de "/ dev / __ properties__ (supprimé)" dans l'espace de processus init via le fichier / proc / <pid> / maps, puis de passer / proc / <pid > / mem lire le contenu de cette partie, cette partie du contenu est en fait des attributs système stockés, trouver l'adresse d'attribut que vous souhaitez modifier, puis écrire la valeur à modifier via ptrace. En plus d'une digression, il existe une faille dans / proc / <pid> / mem, appelée memprodroid, qui peut être utilisée pour faire beaucoup de choses. Si vous êtes intéressé, vous pouvez jeter un oeil.


Mais combiné avec mon environnement réel, j'ai trouvé qu'il n'y a pas "/ dev / __ properties__ (supprimé)" dans le fichier de mappage du processus init, mais "/ dev / __ properties__". La vérification de la signification du drapeau supprimé derrière est que celui-ci sera supprimé. Une fois le fichier mappé en mémoire, l' indicateur supprimé sera ajouté après le fichier. Ce fichier existe dans mon système. Quant à savoir pourquoi il est différent du programme d'origine, je ne l'ai pas compris.

J'ai ensuite changé le programme pour ce dernier, et il a toujours échoué après la recompilation et l'exécution. Le débogage a révélé que quelque chose s'est mal passé lors de l'analyse de cette partie du contenu. En comparant le code de la partie d'analyse setpropex avec le code source de la fonction __system_property_get en bionique, il a été constaté qu'il y avait une grande différence Il existe deux autres structures de données importantes, prop_area et prop_info, qui sont également différentes. Prop_area doit être la structure qui stocke l'intégralité de la mémoire partagée des propriétés système, et prop_info est la structure des propriétés spécifiques. De plus, les définitions des deux structures dans <sys / _system_properties.h> dans setpropex et ndk sont les mêmes, c'est-à-dire que ces deux structures sont différentes dans le ndk et le code source bionique dans AOSP. Je ne sais pas pourquoi? ?


Parlons un peu du concept des propriétés système. Les propriétés système sont gérées par le processus init. Lorsque le processus init démarre, un service de propriétés système est démarré. Toutes les modifications et requêtes sur les propriétés système dans Android sont implémentées via ce service. C'est-à-dire que le service s'exécute dans le processus d'initialisation. Au démarrage du service, les propriétés système sont chargées à partir de quatre fichiers:

/default.prop

/system/build.prop

/system/default.prop

/data/local.prop


Ces fichiers sont chargés dans un morceau de mémoire partagée, puis chaque morceau de mémoire partagée est mappé dans son propre espace de mémoire de processus lorsque le processus démarre. Ce processus de mappage est implémenté dans la fonction __libc_preinit de bionic libc , Il sera exécuté automatiquement lors du chargement de libc.

Voici seulement une brève description du concept. Pour plus de détails, vous pouvez voir un autre article que j'ai réimprimé, cliquez directement .


Le problème ci-dessus est le problème que j'ai rencontré lors de l'utilisation de setpropex. Il n'a pas été résolu jusqu'à présent. Veuillez faire un enregistrement pour plus tard afin de le résoudre.


Lien de référence:

1. http://www.cnblogs.com/bastard/archive/2012/10/11/2720314.html

2. http://blog.csdn.net/jackyu613/article/details/6136620

3. http://blog.csdn.net/xujianqun/article/details/6363318

Publié 60 articles originaux · Comme 44 · Visites 340 000+

Je suppose que tu aimes

Origine blog.csdn.net/beyond702/article/details/52913811
conseillé
Classement