2011-08-29 3 views
1

J'ai une application qui charge un CFPlugin, pas un problème, en utilisant le code plaque de la chaudière Apple.Interposer OS X API dans un plugin

Le plugin a un bug - et son binaire quelqu'un d'autre ...

Le plugin fait des appels dans un cadre système Apple. Si je pouvais intercepter les appels que le plugin veut faire au framework, tout irait bien. Je n'ai même pas besoin d'appeler les versions 'réelles'. Essentiellement, je veux appeler ma version à la place de la routine CF d'Apple.

Intercepter des appels à un appel de structure fonctionne dans mon code dans mon application, mais le plugin appelle toujours le «vrai» appel de cadre au lieu de mon interception.

Je ne suis pas vraiment un expert dyld, mais il semble que le plugin, bien que dans l'espace d'adressage de mon application, charge en quelque sorte sa propre version de l'Apple Framework?

Y at-il un peu de magie que je peux faire en chargeant le plugin, etc. pour qu'il appelle mon code d'interception?

Répondre

0

1) faire dyld interposant dans un libFix.dylib séparé comme décrit dans le livre de Amit: http://osxbook.com (impliquant section DATA __interpose)

2) utiliser DYLD_INSERT_LIBRARIES =/path/to/libFix.dylib avant le lancement de votre application

commentaire de ce type peut aussi aider à: http://www.mikeash.com/pyblog/friday-qa-2009-01-30-code-injection.html#comment-3fb6e4b8cf65ec984e7836e2b86a2875

+0

Merci. Je ne vais pas tester la solution postée - mais ça sonne bien! Juste une note si quelqu'un trébuche ici dans le futur - (comme moi). Merci encore. –