2010-04-22 5 views

답변

22

답변은 응용 프로그램 또는 시스템 전반에서이 작업을 수행 할 것인지 여부에 따라 달라집니다. 자신의 응용 프로그램에서는 꽤 쉽습니다. 동적 링커는 DYLD_INSERT_LIBRARIES과 같은 기능을 제공합니다. 디버깅/계측 목적으로이 작업을 수행하는 경우 DTrace도 확인하십시오.

Objective-C 메소드 구현을 메소드 swizzling으로 대체 할 수 있습니다. JRSwizzle 또는 Apple의 method_exchangeImplementations (10.5 이상)

시스템 전반의 라이브러리 동작을 수정하려면 다른 프로세스의 주소 공간으로로드해야합니다. 원래 다른 목적 (input managersscripting additions)을 위해 설계

  • 두 로딩 메커니즘은 일반적으로이 목적을 위해 학대,하지만 난 정말 그들을 추천하지 않을 것입니다.
  • mach_inject/mach_override은 코드를로드하고 함수 구현을 대체하기위한 오픈 소스 라이브러리 집합입니다. 그러나 라이브러리를 사용하는 자신 만의 응용 프로그램을 작성해야합니다. (또한, this answer에서 봐, 당신은 다른 프로세스에 코드를 주입하기 위해 특별한 권한이 필요합니다.)

비 디버깅을 위해 응용 프로그램 패치/코드 주입 강하게 애플과 일부 Mac 낙담 있음을 유의하시기 바랍니다 사용자 (및 개발자)는 이러한 실행을 극도로 비판합니다. 이 비판의 상당 부분은 잘 알려지지 않았지만 응용 프로그램 충돌 및 문제에 연루된 합법적으로 잘못 작성된 "플러그인"(특히 Safari에 패치를 적용한 플러그인)이 많이있었습니다. 코드 방어.

(면책 조항 :. 나는 (무료) APE 모듈의 저자와 mach_inject를 사용하는 응용 프로그램을 오전)

+0

링크가 어떤 업데이트가 죽었나요? SDK에 대해 얘기하고 있습니다. –

+1

APE는 기본적으로 기본적으로 지원되지 않으며 여러 OS 버전에 대한 공식 릴리스가 없습니다. 가장 좋은 방법은 mach_inject입니다. –

+0

'DYLD_INSERT_LIBRARIES'은 이제 SIP 덕분에 엘 캐피 탄 이상에서는 무시됩니다. – Qix

관련 문제