1) Objc 뜯어보기2) objc_msgSend 런타임 함수C 언어 프로토타입3) objc_object C 구조체4) objc_class C 구조체5) objc_method_list C 구조체6) objc_method C 구조체7) 후킹을 위한 정리
1) Objc 뜯어보기
Hello *hello = [ [ Hello alloc ] init ] ; [ hello say:@”Hello, world!”];
여기서 호출된 메소드는 총 3개
alloc
,init
,say
런타임 함수를 이용해서 어떻게 변환될까?
2) objc_msgSend 런타임 함수
[수신자 메세지]
구문이 objc_msgSend()
런타임 함수로 변환됨.C 언어 프로토타입
id objc_msgSend(id self, SEL op, ...)
메세지
수신자
(id self)- 메세지가 전달될 클래스 인스턴스를 가리키는 포인터
셀렉터
(SEL op)- 메세지를 처리할 메소드 이름 (문자 배열)

- objc_msgSend() 만으로는 함수 구현에 어떻게 도달하는지 모름.
- ’후킹’을 하려면 좀 더 자세한 내부 과정을 알 필요가 있음.
3) objc_object C 구조체
objc_object
는objc_class
구조체 포인터를 멤버로 가지는 구조체
objc_class
구조체 포인터는 Objc 클래스의인스턴스
를 나타냄.

4) objc_class C 구조체
objc_class C 구현 (얘가
인스턴스
라고 보면 됨)
5) objc_method_list C 구조체
메소드 리스트

6) objc_method C 구조체
메소드 구조체

7) 후킹을 위한 정리
객체
는isa
변수를 가지고, 이는클래스 오브젝트
를 가리킨다.
- 클래스 오브젝트에는
메소드 목록
이 있다.
메소드 구조체
에는 메소드의 실제 구현 위치가 담겨있다.
- 런타임 함수를 이용해서 메소드 구현을 바꾸자.
