Ce qui est nécessaire pour exécuter des binaires elfe compilés d'APK Android? (Comprendre Android Internals) -- linux domaine et kernel domain android en relation problème

What is needed to run ELF binaries compiled from android APKs? (understanding android internals)



1
vote

problème

français

J'essaie de comprendre comment fonctionne Android. Avant l'art, il a utilisé Dalvik pour exécuter le code Java. Je suppose que cela a créé un processus de dalkiv dans le noyau de "Linux" qui était simplement une machine virtuelle qui a dirigé le bytecode de Dex.

Pour l'art, le bytecode DEX est compilé dans les instructions de l'architecture du processeur (se produit pendant le processus d'installation). Ce bytecode de Dex compilé est stocké dans un binaire ELF. C'est donc quelque chose que le noyau du "Linux" peut comprendre.

Supposons donc que je voulais exécuter ce binaire elfe sur Linux. Outre ashmem et binder Modules de noyau, de quoi aurais-je besoin de plus? Quelles bibliothèques ce binaire ELF nécessite-t-elle? Ce binaire Elf est-il simplement lancé comme un processus Linux?

J'ai essayé de lire le code source Anbox.io, mais je ne pouvais pas comprendre comment il a lancé un binaire elfe d'un APK. Peut-être comprendre ce qu'il faut courir, il me fera comprendre le code source d'ANBOX.IO mieux.

J'ai aussi trouvé https: //android.googlesource .com / Platform / Art / + / Refs / Têtes / Master / Runtime / Mais je ne sais pas où commencer. Quel est / runtime? Est-ce un programme, une bibliothèque? L'exécution Android est-elle quelque chose qui est associé avec le binaire ELF généré par Dex Bytecode?

langue Anglaise

I'm trying to understand how Android works internally. Before ART, it used Dalvik to run java code. I guess it created a Dalkiv process in 'Linux' kernel which was simply a VM that ran the dex bytecode.

For ART, the dex bytecode is compiled into instructions in the processor's architecture (happens during the installation process). This compiled dex bytecode is stored into an ELF binary. So it's somethig that 'Linux' kernel can understand.

So suppose I wanted to run this ELF binary on Linux. Besides ashmem and binder kernel modules, what more would I need? Which libraries do this ELF binary require? Is this ELF binary simply launched as a linux process?

I tried reading anbox.io source code, but I couldn't understand how it launched an ELF binary from an APK. Maybe understanding what it's required to run it will make me understand anbox.io's source code better.

I also found https://android.googlesource.com/platform/art/+/refs/heads/master/runtime/ but I don't know where to begin. What is /runtime? Is it a program, a library? Is Android Runtime something that is linked together with the ELF binary generated from dex bytecode?

     
   
   

Liste de réponses

2
 
vote

Ce qui est nécessaire pour exécuter des fichiers binaires elfe compilés d'APK Android?

Un simple Hello World App Ce qui ne fait rien sauf imprimer Bonjour World! (aucune animation, pas de sons, pas de menus), en cours d'exécution sur Android 9 Dispositif:

  • Ouvre 30+ Fichiers, inodes anonymes et sockets UNIX explicitement.
  • partage 500+ Fichiers mappé de mémoire de /data , /system , /vendor et /dev .
  • communique, au moins, à SURFACE FLINGER (via Window Manager dans system_server ) pour afficher quelque chose à l'écran. Il peut éventuellement être plus d'IPCS (liants ou autres).
  • Besoins gestionnaires d'activité, gestionnaire de paquets et éventuellement d'autres services exécutés dans system_server qui gérent les classes de l'application liées à la création d'activités et aux autorisations.
  • a besoin zygote processus exécutant sur Fork VMS pour system_server et l'application elle-même.

Donc, toutes ces exigences doivent être remplies pour exécuter elf binaire (objet partagé: 500+0 ) compilé de APK.

COMPARAISON, un programme Java Hello World compilé avec GCJ relie dynamiquement à moins de 5 bibliothèques. Bien qu'un programme C similaire C (lié statiquement) n'a aucune dépendance d'exécution, à l'exception de l'architecture requise.

Je suppose que cela a créé un processus de dalkiv dans le noyau de "Linux" qui était simplement un VM qui a exécuté le 99887776611 bytecode.

Non. Dalvik n'était pas une machine virtuelle basée sur le noyau ( KVM ; si c'est ce que tu veux dire ). Dalvik and Art sont VMS de processus qui fonctionnent dans les utilisateursPace.

Pour l'art, le bytecode DEX est compilé dans les instructions de l'architecture du processeur (se produit pendant le processus d'installation).

Il est guidé sur le profil, arrive rarement pendant le processus d'installation.

Qu'est-ce que 500+2 ? Est-ce un programme, une bibliothèque?

Runtime est un environnement dans lequel les programmes sont écrits dans une langue spécifique. L'art est un runtime pour Java. Il se compose principalement de binaires exécutables natifs / de bibliothèques partagées (y compris un compilateur VM / interpréteur / JIT) et des bibliothèques de classe Java standard (principalement dans le 500+3 fichiers) enregistrés dans 500+4 .

Un autre exemple bien connu est Java Runtime Environment ( JRE ) par Oracle / Soleil qui se trouve sur la plupart des pcs.

est l'exécution Android Quelque chose qui est associé avec le binaire Elf généré à partir de 500+5 bytecode?

correct.

Ce binaire ELF est-il simplement lancé sous forme de processus Linux?

Non. Le binaire Elf compilé de 500+6 dans APK n'est pas un objet exécutable mais un objet partagé. Il doit donc être chargé en mémoire avec d'autres dépendances par un autre processus, qui est l'art (VM).

Supposons donc que je voulais exécuter ce binaire elfe sur Linux. Outre 500+7 et 99887776618 Modules de noyau, de quoi aurais-je besoin de plus? Quelles bibliothèques font ce binaire elfe?

Tout d'abord, vous ne pouvez pas exécuter le binaire ELF sur un système Linux non andrid Parce que le binaire n'est pas un exécutable lié de manière statique. Mais même si c'est le cas, il existe des contraintes encore plus grandes, en particulier l'abstraction matérielle d'Android. 500+9 et /data0 sont des mécanismes IPC. Ils ne donnent aucun sens que si les processus auxquels l'application veut communiquer existe également, ce qui n'est pas le cas. Avec des SDK Java basés sur Linux, il est relativement facile à réaliser.

lié:

  • Applications Android pour "Armeabi-v7a" et architecture "x86": SOC vs processeur vs. Abi
  • compilation AOT dans hotspot ( /data1 )
  • JIT vs AOT: Unité et conflit de compilateurs dynamiques et statiques

 

What is needed to run ELF binaries compiled from Android APKs?

A simple hello world app which does nothing except printing Hello World! (no animations, no sounds, no menus), running on Android 9 device:

  • Opens 30+ files, anonymous inodes and UNIX sockets explicitly.
  • Shares 500+ memory-mapped files from /data, /system, /vendor and /dev.
  • Communicates, at least, to Surface Flinger (through Window Manager in system_server) to display something on screen. There can possibly be more IPCs (Binders or others).
  • Needs Activity Manager, Package Manager and possibly other services running in system_server which manage app's classes related to activity creation and permissions.
  • Needs zygote process running to fork VMs for system_server and the app itself.

So all of these requirements must be fulfilled to run ELF binary (shared object: /data/app/com.ravipatel.helloworld.test-*/oat/arm64/base.odex) compiled from APK.

As a comparison, a hello world Java program compiled with GCJ dynamically links to less than 5 libraries. While a similar C program (statically linked) has no runtime dependencies except the required architecture.

I guess it created a Dalkiv process in 'Linux' kernel which was simply a VM that ran the dex bytecode.

No. Dalvik wasn't a Kernel-based Virtual Machine (KVM; if that's what you mean). Both Dalvik and ART are Process VMs which run in userspace.

For ART, the dex bytecode is compiled into instructions in the processor's architecture (happens during the installation process).

It's profile-guided, rarely happens during the installation process.

What is /runtime? Is it a program, a library?

Runtime is an environment in which programs written in a specific language run. ART is a runtime for Java. It mainly consists of native executable binaries / shared libraries (including a VM / interpreter / JIT compiler and OAT compiler) and standard Java class libraries (mostly in the from of .jar files) saved in /system.

Other well-known example is Java Runtime Environment (JRE) by Oracle/Sun which is found on mostly PCs.

Is Android Runtime something that is linked together with the ELF binary generated from dex bytecode?

Correct.

Is this ELF binary simply launched as a Linux process?

No. The ELF binary compiled from .dex file in APK is not an executable but a shared object. So it needs to be loaded in memory along with other dependencies by some other process, which is ART (VM).

So suppose I wanted to run this ELF binary on Linux. Besides ashmem and binder kernel modules, what more would I need? Which libraries do this ELF binary require?

First of all you cannot run the ELF binary on a non-Android Linux system because the binary is not a statically linked executable. But even if it is, there are even bigger constraints, particularly Android's hardware abstraction. binders and ashmem are IPC mechanisms. They make sense only if the processes to whom the app wants to communicate also exist, which is not the case. With Linux based Java SDKs it's relatively easy to achieve.


RELATED:

  • Android apps for xe2x80x9carmeabi-v7axe2x80x9d and xe2x80x9cx86xe2x80x9d architecture: SoC vs. Processor vs. ABI
  • AOT Compilation in HotSpot (jaotc)
  • JIT vs. AOT: Unity And Conflict of Dynamic and Static Compilers
 
 
 
 

Questions connexes

0  Mes Tecno N6s ne commencent pas et affiche le processus.Alroid .com ne répond pas  ( My tecno n6s wont start and displays the process android com is not responding ) 
Chaque fois que je démarre mon Tecno N6S, il ne dépasse pas le texte du texte de la société Tecno et si cela devait saisir mon code PIN, un texte apparaît ind...

-1  Lenovo S6000 - Alimentation automatique après la connexion de chargeur [DUPLIQUE]  ( Lenovo s6000 auto power on after connecting charger ) 
Cette question a déjà des réponses ici : automatiquement allumée sur Android lorsque le chargeur est...

0  En utilisant un dongle wifi pour surveiller le réseau  ( Using a wifi dongle to monitor network ) 
J'ai une boîte intelligente Android avec une connexion WiFi intégrée et je veux ajouter une dongle à la boîte afin que je puisse surveiller le réseau. J'ai tr...

3  Clignotant un nouveau noyau  ( Flashing a new kernel ) 
Si je vais clignoter un nouveau noyau avec Rom Manager Pro, dois-je réinstaller mon mod, supprimer mes données ou supprimer mon cache? Je suis en cours d'ex...

170  Quelle est la différence entre: enracinement, jailbreak, rom, mod, etc.?  ( What is the difference between rooting jailbreak rom mod etc ) 
Quelle est la différence entre: Déverrouillage du chargeur de démarrage (Prérequis pour faire beaucoup, bien que toutes, d'autres choses ci-dessous) enra...

0  Nexus 4 enraciné, coincé à CM10 pour diverses raisons - Aide!  ( Nexus 4 rooted stuck at cm10 for various reasons help ) 
J'utilise un Nexus 4 depuis près de 2 ans maintenant. Je l'ai enraciné pour obtenir la connexion LTE. Radio dégradée et tout ... c'était au-delà de mon niveau...

0  Comment puis-je désactiver la fonctionnalité GPS de mon téléphone Android au niveau du noyau?  ( How can i disable the gps functionality from my android phone at the kernel leve ) 
Comment puis-je désactiver la fonctionnalité GPS de mon téléphone Android au niveau du noyau? Je sais que cela nécessite (bien que pas sûr) désactiver les pil...

2  Où sont les noyaux personnalisés brillés dans la mémoire interne?  ( Where are custom kernels being flashed to in internal memory ) 
J'ai décompressé des fichiers zip pour les noyaux personnalisés et remarqua que la majorité des fichiers appliqués sont dans un dossier d'un kernel. Cependant...

2  Comment faire fonctionner Ethernet sur Android sur OTG?  ( How to make ethernet work on android over otg ) 
J'essaie d'utiliser un modem LTE connecté à un périphérique Android 7 sur un câble OTG. Le noyau reconnaît l'appareil et les enregistre avec cdc_ether , mais...

1  Activer la console Framebuffer dans la source du noyau Android  ( Enable framebuffer console in android kernel source ) 
est-il possible d'activer la console Framebuffer dans les sources de noyau Android de Samsung, de voir des messages de noyau au lieu de simplement le bootlogo...




© 2022 www.demandez.top All Rights Reserved. Questions et réponses Accueil Tous les droits sont réservés