2010-04-22 13 views

Respuesta

22

La respuesta depende de si desea hacer esto en su propia aplicación o en todo el sistema. En tu propia aplicación, es bastante fácil; el enlazador dinámico proporciona características como DYLD_INSERT_LIBRARIES. Si está haciendo esto para fines de depuración/instrumentación, también consulte DTrace.

Puede reemplazar las implementaciones del método Objective-C con el método swizzling, p. Ej. JRSwizzle o method_exchangeImplementations de Apple (10.5+).

Si desea modificar el comportamiento de la biblioteca en todo el sistema, tendrá que cargar en espacios de direcciones de otros procesos.

  • dos mecanismos de carga diseñados originalmente para otros propósitos (input managers y scripting additions) se abusa comúnmente para este propósito, pero yo no recomendaría ellos.
  • mach_inject/mach_override son un conjunto de bibliotecas de código abierto para cargar código y reemplazar implementaciones de funciones, respectivamente; sin embargo, usted es responsable de escribir su propia aplicación que usa las bibliotecas. (También, echar un vistazo a this answer; necesita permisos especiales para inyectar código en otros procesos.)

Por favor, tenga en cuenta que la inyección de aplicación de parches/código para fines no depuración está totalmente desaconsejado por Apple y algunos Mac los usuarios (y los desarrolladores) son extremadamente críticos con la práctica. Mucha de esta crítica está mal informada, pero ha habido una serie de "complementos" legítimamente mal escritos (particularmente los que parchean a Safari) que han estado implicados en fallas y problemas de la aplicación. Codifica a la defensiva.

(Negación:. Soy el autor de un módulo de APE (libre) y una aplicación que utiliza mach_inject)

+0

el enlace está muerto hay alguna actualización? Estoy hablando del SDK –

+1

APE básicamente no es compatible ahora y no ha habido un lanzamiento oficial para varias revisiones del sistema operativo - su mejor apuesta es mach_inject. –

+0

'DYLD_INSERT_LIBRARIES' ahora se ignora en El Capitan y más arriba gracias a SIP. – Qix

Cuestiones relacionadas