2010-04-22 24 views

Trả lời

22

Câu trả lời tùy thuộc vào việc bạn muốn thực hiện điều này trong ứng dụng của riêng bạn hay toàn hệ thống. Trong ứng dụng của riêng bạn, nó khá dễ dàng; liên kết động cung cấp các tính năng như DYLD_INSERT_LIBRARIES. Nếu bạn đang làm điều này cho mục đích gỡ lỗi/thiết bị đo đạc, hãy kiểm tra DTrace.

Bạn có thể thay thế các phương pháp triển khai phương pháp Objective-C bằng cách xử lý sự cố, ví dụ: JRSwizzle hoặc Apple method_exchangeImplementations (10.5+).

Nếu bạn muốn thay đổi toàn bộ hành vi thư viện, bạn sẽ cần tải vào không gian địa chỉ của các quy trình khác.

  • Hai cơ chế tải thiết kế ban đầu cho các mục đích khác (input managersscripting additions) thường bị lạm dụng cho mục đích này, nhưng tôi sẽ không thực sự khuyên họ.
  • mach_inject/mach_override là một bộ thư viện mã nguồn mở để tải mã và thay thế các triển khai chức năng tương ứng; tuy nhiên, bạn chịu trách nhiệm viết ứng dụng của riêng bạn sử dụng các thư viện. (Ngoài ra, hãy xem this answer; bạn cần các quyền đặc biệt để đưa mã vào các quy trình khác.)

Hãy nhớ rằng việc vá/mã ứng dụng cho mục đích không gỡ lỗi được Apple và Mac không khuyến khích mạnh mẽ người dùng (và các nhà phát triển) là cực kỳ quan trọng của việc thực hành. Phần lớn những lời chỉ trích này không được thông báo, nhưng đã có một số "plug-in" được viết sai hợp pháp (đặc biệt là những bản vá lỗi của Safari) có liên quan đến các sự cố và sự cố ứng dụng. Mã phòng thủ.

(Disclaimer:. Tôi là tác giả của một (miễn phí mô-đun APE) và một ứng dụng mà sử dụng mach_inject)

+0

liên kết là chết có bất kỳ bản cập nhật? Tôi đang nói về SDK –

+1

APE về cơ bản không được hỗ trợ ngay bây giờ và chưa có bản phát hành chính thức cho một số bản sửa đổi hệ điều hành - đặt cược tốt nhất của bạn là mach_inject. –

+0

'DYLD_INSERT_LIBRARIES' hiện bị bỏ qua trên El Capitan trở lên nhờ SIP. – Qix

Các vấn đề liên quan