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
|
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
|
-
+
-
+
-
+
|
jz 0f
ret
0:
call getEIP
addl $_GLOBAL_OFFSET_TABLE_, %eax
lea \notFound@GOTOFF(%eax), %eax
movl \notFound@GOT(%eax), %eax
jmp *%eax
.LtaggedPointer_\name:
call getEIP
addl $_GLOBAL_OFFSET_TABLE_, %eax
leal objc_taggedPointerSecret@GOTOFF(%eax), %ecx
movl objc_taggedPointerSecret@GOT(%eax), %ecx
xorl (%ecx), %edx
andb $0xE, %dl
movzbl %dl, %edx
leal objc_taggedPointerClasses@GOTOFF(%eax), %eax
movl objc_taggedPointerClasses@GOT(%eax), %eax
movl (%eax,%edx,2), %edx
movl 32(%edx), %edx
jmp .Lmain_\name
.type \name, %function
.size \name, .-\name
.endm
|
106
107
108
109
110
111
112
113
114
115
|
106
107
108
109
110
111
112
113
114
115
|
-
+
|
xorl %eax, %eax
ret
getEIP:
movl (%esp), %eax
ret
#ifdef OF_LINUX
#if defined(OF_LINUX) || defined(OF_HURD)
.section .note.GNU-stack, "", %progbits
#endif
|