Decompiler du code ObjC
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
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
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
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>
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
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.
j'espére le porter sur cocoa, macosX.Connaissez vous des projets qui vont dans ce sens ?
Je ne saurai répondre à tes attentes, ce sujet me dépasse... ;-) mais en tout cas bienvenue sur OC ! ;-)
Si on utilise cette optimisation, doit-on compiler le programme pour chaque type de possesseur ?
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)