ObjFW  Diff

Differences From Artifact [f7e556eeea]:

To Artifact [af6d1eb84b]:


25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67

68



69

70
71





















72
73

74









75
76
77





78
79
80
81
82
83
84
85
L_sel_forwardingTargetForSelector:
	.long L_str_forwardingTargetForSelector

.section __OBJC, __image_info
	.long 0, 0

.section __TEXT, __text, regular, pure_instructions
.macro forward dispatch_func
	pushl	%ebp
	movl	%esp, %ebp

	pushl	8(%ebp)
	call	_object_getClass
	addl	$4, %esp
	movl	%eax, %edx

	call	get_eip
L0_\dispatch_func:
	pushl	L_sel_forwardingTargetForSelector-L0_\dispatch_func(%eax)
	pushl	%edx
	call	_class_respondsToSelector
	addl	$8, %esp
	testl	%eax, %eax
	jz	fail

	pushl	12(%ebp)
	call	get_eip
L1_\dispatch_func:
	pushl	L_sel_forwardingTargetForSelector-L1_\dispatch_func(%eax)
	pushl	8(%ebp)
	call	_objc_msgSend

	testl	%eax, %eax
	jz	fail

	cmpl	8(%ebp), %eax
	je	fail

	movl	%eax, 8(%ebp)

	movl	%ebp, %esp
	popl	%ebp


	jmp	\dispatch_func



.endmacro


_of_forward:





















	forward	_objc_msgSend


_of_forward_stret:









	forward	_objc_msgSend_stret

fail:





	movl	%ebp, %esp
	popl	%ebp

	jmp	_of_method_not_found

get_eip:
	movl	(%esp), %eax
	ret







|






<


|
|
|







|
|














>
|
>
>
>
|
>

|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|

>
|
>
>
>
>
>
>
>
>
>
|

|
>
>
>
>
>






|

25
26
27
28
29
30
31
32
33
34
35
36
37
38

39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
L_sel_forwardingTargetForSelector:
	.long L_str_forwardingTargetForSelector

.section __OBJC, __image_info
	.long 0, 0

.section __TEXT, __text, regular, pure_instructions
_of_forward:
	pushl	%ebp
	movl	%esp, %ebp

	pushl	8(%ebp)
	call	_object_getClass
	addl	$4, %esp


	call	get_eip
L0:
	pushl	L_sel_forwardingTargetForSelector-L0(%edx)
	pushl	%eax
	call	_class_respondsToSelector
	addl	$8, %esp
	testl	%eax, %eax
	jz	fail

	pushl	12(%ebp)
	call	get_eip
L1:
	pushl	L_sel_forwardingTargetForSelector-L1(%edx)
	pushl	8(%ebp)
	call	_objc_msgSend

	testl	%eax, %eax
	jz	fail

	cmpl	8(%ebp), %eax
	je	fail

	movl	%eax, 8(%ebp)

	movl	%ebp, %esp
	popl	%ebp

	jmp	_objc_msgSend

fail:
	movl	%ebp, %esp
	popl	%ebp

	jmp	_of_method_not_found

_of_forward_stret:
	pushl	%ebp
	movl	%esp, %ebp

	pushl	12(%ebp)
	call	_object_getClass
	addl	$4, %esp

	call	get_eip
L2:
	pushl	L_sel_forwardingTargetForSelector-L2(%edx)
	pushl	%eax
	call	_class_respondsToSelector
	addl	$8, %esp
	testl	%eax, %eax
	jz	fail_stret

	pushl	16(%ebp)
	call	get_eip
L3:
	pushl	L_sel_forwardingTargetForSelector-L3(%edx)
	pushl	12(%ebp)
	call	_objc_msgSend

	testl	%eax, %eax
	jz	fail_stret

	cmpl	12(%ebp), %eax
	je	fail_stret

	movl	%eax, 12(%ebp)

	movl	%ebp, %esp
	popl	%ebp

	jmp	_objc_msgSend_stret

fail_stret:
	movl	12(%ebp), %eax
	movl	%eax, 8(%ebp)
	movl	16(%ebp), %eax
	movl	%eax, 12(%ebp)

	movl	%ebp, %esp
	popl	%ebp

	jmp	_of_method_not_found

get_eip:
	movl	(%esp), %edx
	ret