Par exemple, vous avez TextEdit Application, lorsque vous enregistrez le fichier, je veux savoir quelles méthodes d'Objective-C sont appelées. J'ai un fichier d'en-tête de Textedit en utilisant class-dump.Comment trouver des méthodes objectives-c à l'exécution pour n'importe quelle application sur Mac?
Y at-il un moyen de savoir laquelle de ces méthodes (que nous produisons à partir de la classe-dump) est appelée à l'exécution?
est-il un moyen de le faire avec dtrace ??
Merci pour vos informations. Mais j'ai besoin de plus. J'ai une classe-vidage de TextEdit. Dans ce que je veux savoir si - (BOOL) validateMenuItem: (id) arg1; de classe Le document est exécuté ou non. J'ai donc utilisé votre script et exécuté avec dtrace -s userfunc.d 1102 * validateMenuItem * ... Il indique que la description de la sonde ne correspond pas. Que faire?? –
@hrishikeshchaudhari Le nom de la fonction peut ne pas être exactement 'validateMenuItem'. C'est probablement [mutilé] (https://en.wikipedia.org/wiki/Name_mangling). Je ne suis pas familier avec OS X pour dire quels utilitaires sont disponibles pour trouver des noms de fonctions mutilés dans les binaires. 'chaînes -a/bin/fichier | grep -i validateMenuItem' * pourrait fonctionner. Cela pourrait aider: http://stackoverflow.com/questions/4506121/how-to-print-a-list-of-symbols-exported-from-a-dynamic-library Réduire le script DTrace à quelque chose comme 'pid $ 1: :: entry {} 'pourrait émettre * tous * les appels de fonction que fait le processus. Je ne peux pas tester ça maintenant. –
Vous avez probablement raison, les fonctions sont mutilées. Il n'y a maintenant moyen de le faire par ingénierie inverse ou par tâtonnement. Je me demande vraiment comment les gens font du swizzling. L'ingénierie inverse prendra probablement des jours pour trouver la fonction exacte à faire swizzling. –