Class dump

LeChatNoirLeChatNoir Membre, Modérateur
17:01 modifié dans Vos applications #1
Slt,
J'ai eu récemment un bug que j'ai eu du mal à  élucider.

J'ai eu tellement de mal que je me suis penché sur class-dump, un utilitaire en ligne de commande qui apparemment permet de "hacker" une appli.

Mais je n'ai pas su le faire fonctionner.

J'ai fait "class-dump -a /chemin de mon appli/monappli.app/Content/MacOS/MonAppli" mais ca ne donne rien (pareil avec -H, ou autre option).

C'est plus compliqué que ca ? Quelqu'un connait ?

Merci !

Réponses

  • BruBru Membre
    17:01 modifié #2
    class-dump fonctionne très bien (c'est un de mes outils favoris).

    Mais...

    1. si l'appli n'est pas au format mach-o (format des exécutables sous OSX),
    2. si l'appli ne définit aucune classe (objective-c),

    alors class-dump ne renverra rien !

    .
  • LeChatNoirLeChatNoir Membre, Modérateur
    17:01 modifié #3
    Ben mon appli est une appli Cocoa développée sous Xcode.
    Je build et je tente le classdump sur le produit résultant.
    Peut être que ca n'a pas marché car je suis en "Development Style" ?
    Et mon appli définit un paquet de classes....
  • BruBru Membre
    17:01 modifié #4
    Fais juste un class-dump sans option vers ton appli.

    Quand au mode "development", je ne pense pas que ça change quelque chose. Le seul changement est l'activation de Zero-Link, mais ça n'a rien à  voir avec les définitions de classes.

    Quelle version d'OS as-tu et quelle version de class-dump (les anciennes versions de class-dump ne fonctionnent pas sous 10.4).

    Et, tu n'as vraiment aucun message dans le terminal à  la suite de la commande ?

    .
  • LeChatNoirLeChatNoir Membre, Modérateur
    17:01 modifié #5
    Je suis en 10.4 et j'ai class-dump 3 et des brouettes (je peux pas vérifier là ) ; mais il s'agit bien d'une version pour Tiger.

    Ca me met l'en-tête genre (de mémoire) :
    /* Salut, c'est class dump, je vais commencer mon
    boulot.
    Version machintruc */

    Et c'est tout....

  • BruBru Membre
    17:01 modifié #6
    Il faut la version 3.1 pour OS 10.4.

    Sinon, que dire de plus...
    Soit sûr de ton chemin.
    Tu me parles d'une appli que tu fais, et que tu compiles en mode "development".
    Par défaut, cette appli compilée se trouve quelque part dans "/.../ton-projet/build/development/ton-appli.app/Contents/Macos/ton-appli" (je ne suis pas sûr du chemin complet, mais ça doit ressembler à  ça).
    Or, dans ton premier post, le chemin semble différent...

    .
  • LeChatNoirLeChatNoir Membre, Modérateur
    17:01 modifié #7
    oui, le chemin est le bon (je le glisse depuis le finder dans le terminal ; j'avais oublié le build dans mon premier post).
    Je regarde en détail ce midi.
    Merci de ton aide !
  • aranaudaranaud Membre
    17:01 modifié #8
    J'ai regards mais je ne vois pas trop l'utilité.
    Sa renvoie le contenue des fichiers .h avec les noms de registre à  la place des variables (fp8, fp12, ... doivent être des registres) et sûrement des adresses (// 124 = 0x7c, // 128 = 0x80, ...) ou numéraux de variables de la classe concerner.
  • LeChatNoirLeChatNoir Membre, Modérateur
    17:01 modifié #9
    Ok c'était bien parce que j'étais en Style Development. En Deployment, ca fonctionne.

    Oui, je croyais aussi que c'était un peu plus puissant, genre que l'appli se lançait et que ca traçait les méthodes et classes appelées selon les actions faites dans l'appli.

    En fait, ca ne fait que vider les classes utilisées.

    C'est utile lorsque l'on veut connaitre certaines méthodes privées du framework Apple même si on est pas sensés les utiliser...

    Merci de votre aide !
  • aranaudaranaud Membre
    17:01 modifié #10
    dans 1141125304:

    C'est utile lorsque l'on veut connaitre certaines méthodes privées du framework Apple même si on est pas sensés les utiliser...

    Ah oui, en effet. On peut voir les méthodes priver d'une classe. Mais, si j'ai bien comprit, elles ne peuvent pas être utilisé (a moins de surchargé la classe peut-être).
  • LeChatNoirLeChatNoir Membre, Modérateur
    17:01 modifié #11
    yep.
    Par exemple, si tu veux réduire ou augmenter le delai d'attente du dépliage d'un item d'une outlineview lors d'un drag dessus, tu peux surcharger la méthode adéquate, qui est une méthode privée.

    C'est fortement déconseillé car Apple ne garantit rien quant à  sa persistence ou son évolution, contrairement aux fonctions de l'API pour lesquelles ils garantissent son fonctionnement au moins pour qques version d'OS X.

    Par ex, une méthode privée que tu auras surchargée et qui fonctionnera sous Tiger ne fonctionnera peut être pas sous Léopard ou Panther.

    Bref, à  utiliser avec précaution.
Connectez-vous ou Inscrivez-vous pour répondre.