Overview
Comment: | Move x86/Mach-O assembly to Intel syntax
A workaround for the assembler bugs has been found. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
54ee8929f0311246ab731e38edafd732 |
User & Date: | js 2023-10-28 17:05:55 |
Context
2023-10-28
| ||
18:04 | Move x86/Mach-O assembly to Intel syntax check-in: 18c524e13d user: js tags: trunk | |
17:05 | Move x86/Mach-O assembly to Intel syntax check-in: 54ee8929f0 user: js tags: trunk | |
2023-10-26
| ||
20:05 | Make OF_DEPRECATED work with Apple GCC 4.0.1 check-in: d62ec447d0 user: js tags: trunk | |
Changes
Changes to src/forwarding/apple-forwarding-x86.S.
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | * file. */ #include "config.h" .globl _OFForward .globl _OFForward_stret .section __TEXT, __cstring, cstring_literals str_forwardingTargetForSelector_: .asciz "forwardingTargetForSelector:" .section __OBJC, __message_refs, literal_pointers, no_dead_strip sel_forwardingTargetForSelector_: .long str_forwardingTargetForSelector_ .section __OBJC, __image_info .long 0, 0 .section __TEXT, __text, regular, pure_instructions _OFForward: | > > > > > > > > > > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 13 14 15 16 17 18 19 20 21 22 23 24 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 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 | * file. */ #include "config.h" .globl _OFForward .globl _OFForward_stret .intel_syntax noprefix /* Work around assembler bugs. */ .macro call .att_syntax /* Use uppercase instruction to avoid recursion. */ CALL $0 .intel_syntax noprefix .endmacro .macro jmp .att_syntax /* Use uppercase instruction to avoid recursion. */ JMP $0 .intel_syntax noprefix .endmacro .section __TEXT, __cstring, cstring_literals str_forwardingTargetForSelector_: .asciz "forwardingTargetForSelector:" .section __OBJC, __message_refs, literal_pointers, no_dead_strip sel_forwardingTargetForSelector_: .long str_forwardingTargetForSelector_ .section __OBJC, __image_info .long 0, 0 .section __TEXT, __text, regular, pure_instructions _OFForward: push ebp mov ebp, esp push ebx sub esp, 20 call getEIP 0: mov eax, [ebp + 8] mov [esp], eax call _object_getClass mov [esp], eax mov eax, [ebx + sel_forwardingTargetForSelector_ - 0b] mov [esp + 4], eax call _class_respondsToSelector test eax, eax jz 0f mov eax, [ebp + 8] mov [esp], eax mov eax, [ebx + sel_forwardingTargetForSelector_ - 0b] mov [esp + 4], eax mov eax, [ebp + 12] mov [esp + 8], eax call _objc_msgSend test eax, eax jz 0f cmp eax, [ebp + 8] je 0f mov [ebp + 8], eax add esp, 20 pop ebx pop ebp jmp _objc_msgSend 0: add esp, 20 pop ebx pop ebp jmp _OFMethodNotFound _OFForward_stret: push ebp mov ebp, esp push ebx sub esp, 20 call getEIP 0: mov eax, [ebp + 12] mov [esp], eax call _object_getClass mov [esp], eax mov eax, [ebx + sel_forwardingTargetForSelector_ - 0b] mov [esp + 4], eax call _class_respondsToSelector test eax, eax jz 0f mov eax, [ebp + 12] mov [esp], eax mov eax, [ebx + sel_forwardingTargetForSelector_ - 0b] mov [esp + 4], eax mov eax, [ebp + 16] mov [esp + 8], eax call _objc_msgSend test eax, eax jz 0f cmp eax, [ebp + 12] je 0f mov [ebp + 12], %eax add esp, 20 pop ebx pop ebp jmp _objc_msgSend_stret 0: add esp, 20 pop ebx pop ebp jmp _OFMethodNotFound_stret getEIP: mov ebx, [esp] ret |