Decompiler du code ObjC

ellisellis Membre
08:28 modifié dans Vos applications #1
Bonjour,

Comme certains l'ont déja remarqué, il existe de nombreux private frameworks dans le framework Apple.
Or ces frameworks sont particulièrement interessants :
- iChat : ce framework permettrait sous Adium d'établir des conférences audio et video
- iSync : on peut imaginer de nomnbreux conduits de synchronisation.

Bref, en attendant qu'Apple release ces frameworks (cela fait plus d'un an que des rumeurs courent
sans résultats), il ne nous reste que l'arme du pauvre : le Reverse Enginering...

En cherchant sur la toile, j'ai découvert de nombreux produits :
- otool : l'outil de base mais pas très lisible
- class-dump : cet outil fournit les interfaces
- vdappc : un décompiler pour gamecube

Les deux premiers outils nous donnent les interfaces; toutefois, cela
est bien souvent insuffisant. Et il est parfois nécessaire de lire le code.
Toutefois l'objC est particulièrement pénible à lire en code asm du fait
que tout message fait appellle à la fonction obj_MsgSend. Pour trouver
la fonction appelée, il faut lire ce qui est placé dans les registres et les
confronter à la section Text du code.

Bref, je suis en train de poser les réflexions d'un décompileur d'objectiveC.

Ellis





Réponses

  • nucleusnucleus Membre
    mai 2004 modifié #2
    Interessant.. Je pense aussi, que compte tenu de la nature très dynamique du langage, on devrait être capable au moins de décompiler la séquence d'appel de méthodes..
    Mais ca va être d?r d'arriver à un resultat aussi parfait que les décompilo Java, à cause de la base C qui permet  beaucoup de libertés..

    <MàJ>
    Il prendre en compte les différentes modes d'optimisation/scheduling possible du compilo.. G3, G4, G5..

    Il doit y avoir des chose interessantes à voir du côté de GDB, puisque le déboggueur d'XCode semble être basé dessus..
    </MàJ>
  • ellisellis Membre
    08:28 modifié #3
    Oui je suis entièrement d'accord. On ne pourra obtenir un résultat aussi bluffant que les décompilateurs
    Java, mais je pense que s'il l'on arrive déja à traduire tous les envois de messages, le résultat sera suffisamment
    utile.

    ellis
  • ellisellis Membre
    08:28 modifié #4
    Pour GDB, si tu n'as pas les symbols, c'est la catastrophe et tu es réduit à effectuer des "disassemble adresse".
    De plus il est incapable de comprendre l'envoi de message et t'affiche de vulgaires obj_msgSend...
    Bref, c'est relativement fastidieux. Tu passes ton temps à lire la table de Text, calculer des décalages et autre
    pour comprendre ce qui se passe.

  • 08:28 modifié #5
    je suis en cours de réalisation d'un petit desassembleur qui devrait être multi-plateforme, basé sur libbfd et libopcodes.
    j'espére le porter sur cocoa, macosX.Connaissez vous des projets qui vont dans ce sens ?
  • muqaddarmuqaddar Administrateur
    08:28 modifié #6
    Salut informaticodoc,

    Je ne saurai répondre à  tes attentes, ce sujet me dépasse... ;-) mais en tout cas bienvenue sur OC ! ;-)
  • aranaudaranaud Membre
    08:28 modifié #7
    dans 1085661338:

    Il prendre en compte les différentes modes d'optimisation/scheduling possible du compilo.. G3, G4, G5..


    Si on utilise cette optimisation, doit-on compiler le programme pour chaque type de possesseur ?
  • 08:28 modifié #8
    Non, il existe des macros qui te permettent de savoir sur quel processeur tu es et donc n'exécuter que la portion du code qui pourra fonctionner.
  • nucleusnucleus Membre
    08:28 modifié #9
    dans 1115299426:

    Non, il existe des macros qui te permettent de savoir sur quel processeur tu es et donc n'exécuter que la portion du code qui pourra fonctionner.

    Les macros sont évaluées avant la compilation (par le précompilateur)..
    Une fois le source compilé:
    - si il y a des des opérations spécifiques à  un processeur cela ne marchera pas pour un autre processeur.. -> il faut donc compiler pour chaque architecture
    - si il ne s'agit que d'optimisations (opérations ou enchainement d'opération privilégiées) ca devrait fonctionner sur l'architecture commmune..

    Normalement les applications OS X devraient être capable de supporter plusieurs architecture dans un même bundle.. mais concretement je sais pas comment ca se passe (pour des binaires spécifiques 64bits par exemple)
Connectez-vous ou Inscrivez-vous pour répondre.