#include "macros.S" .text #ifdef __APPLE__ .zerofill RESV32, RESV32, _wibo_reserve, 0x7E000000 - 0x1000 .no_dead_strip _wibo_reserve #endif #if defined(__x86_64__) && defined(__linux__) # int tebThreadSetup(int entryNumber, TEB *teb) ASM_GLOBAL(tebThreadSetup, @function) push rbx # save rbx mov r8, rsp # save host stack rdfsbase r9 # read host FS base mov rdx, qword ptr [rsi+TEB_SP] # fetch guest stack LJMP32 rsi # far jump into 32-bit code mov ax, 0x2b # user data segment (Linux) mov ds, ax # setup data segment mov es, ax # setup extra segment mov esp, edx # switch to guest stack sub esp, 0x10 # sizeof(user_desc) mov dword ptr [esp], edi # entry_number (arg 0) mov dword ptr [esp+4], esi # base_addr (arg 1) mov dword ptr [esp+8], 0xffff # limit mov dword ptr [esp+12], 0x41 # seg_32bit | usable mov ebx, esp # &user_desc mov eax, 0xf3 # SYS_set_thread_area int 0x80 # syscall test eax, eax # check for error jnz 1f # skip selector setup mov eax, dword ptr [esp] # entry_number cmp eax, -1 # check for invalid entry_number jz 2f # skip selector setup lea ebx, [eax*8+3] # create selector mov fs, bx # setup fs segment mov word ptr [esi+TEB_FS_SEL], bx # save selector jmp 2f # skip error handling 1: mov eax, -1 # return -1 2: add esp, 0x10 # cleanup stack LJMP64 esi # far jump into 64-bit code cdqe # sign-extend eax to rax mov rsp, r8 # switch to host stack wrfsbase r9 # restore host FS base pop rbx # restore rbx ret ASM_END(tebThreadSetup) #endif // __x86_64__ .code32 .macro stubThunkX number #if defined(__x86_64__) #define STUB_THUNK_SYMBOL _Z9stubThunkILm\()\number\()EEvv ASM_GLOBAL(STUB_THUNK_SYMBOL, @function) #else #define STUB_THUNK_SYMBOL _Z9stubThunkILj\()\number\()EEvv ASM_GLOBAL(STUB_THUNK_SYMBOL, @function) #endif pop eax push \number push eax jmp SYMBOL_NAME(thunk_entry_stubBase) ASM_END(STUB_THUNK_SYMBOL) .endm stubThunkX 0 stubThunkX 1 stubThunkX 2 stubThunkX 3 stubThunkX 4 stubThunkX 5 stubThunkX 6 stubThunkX 7 stubThunkX 8 stubThunkX 9 stubThunkX 10 stubThunkX 11 stubThunkX 12 stubThunkX 13 stubThunkX 14 stubThunkX 15 stubThunkX 16 stubThunkX 17 stubThunkX 18 stubThunkX 19 stubThunkX 20 stubThunkX 21 stubThunkX 22 stubThunkX 23 stubThunkX 24 stubThunkX 25 stubThunkX 26 stubThunkX 27 stubThunkX 28 stubThunkX 29 stubThunkX 30 stubThunkX 31 stubThunkX 32 stubThunkX 33 stubThunkX 34 stubThunkX 35 stubThunkX 36 stubThunkX 37 stubThunkX 38 stubThunkX 39 stubThunkX 40 stubThunkX 41 stubThunkX 42 stubThunkX 43 stubThunkX 44 stubThunkX 45 stubThunkX 46 stubThunkX 47 stubThunkX 48 stubThunkX 49 stubThunkX 50 stubThunkX 51 stubThunkX 52 stubThunkX 53 stubThunkX 54 stubThunkX 55 stubThunkX 56 stubThunkX 57 stubThunkX 58 stubThunkX 59 stubThunkX 60 stubThunkX 61 stubThunkX 62 stubThunkX 63 stubThunkX 64 stubThunkX 65 stubThunkX 66 stubThunkX 67 stubThunkX 68 stubThunkX 69 stubThunkX 70 stubThunkX 71 stubThunkX 72 stubThunkX 73 stubThunkX 74 stubThunkX 75 stubThunkX 76 stubThunkX 77 stubThunkX 78 stubThunkX 79 stubThunkX 80 stubThunkX 81 stubThunkX 82 stubThunkX 83 stubThunkX 84 stubThunkX 85 stubThunkX 86 stubThunkX 87 stubThunkX 88 stubThunkX 89 stubThunkX 90 stubThunkX 91 stubThunkX 92 stubThunkX 93 stubThunkX 94 stubThunkX 95 stubThunkX 96 stubThunkX 97 stubThunkX 98 stubThunkX 99 stubThunkX 100 stubThunkX 101 stubThunkX 102 stubThunkX 103 stubThunkX 104 stubThunkX 105 stubThunkX 106 stubThunkX 107 stubThunkX 108 stubThunkX 109 stubThunkX 110 stubThunkX 111 stubThunkX 112 stubThunkX 113 stubThunkX 114 stubThunkX 115 stubThunkX 116 stubThunkX 117 stubThunkX 118 stubThunkX 119 stubThunkX 120 stubThunkX 121 stubThunkX 122 stubThunkX 123 stubThunkX 124 stubThunkX 125 stubThunkX 126 stubThunkX 127 stubThunkX 128 stubThunkX 129 stubThunkX 130 stubThunkX 131 stubThunkX 132 stubThunkX 133 stubThunkX 134 stubThunkX 135 stubThunkX 136 stubThunkX 137 stubThunkX 138 stubThunkX 139 stubThunkX 140 stubThunkX 141 stubThunkX 142 stubThunkX 143 stubThunkX 144 stubThunkX 145 stubThunkX 146 stubThunkX 147 stubThunkX 148 stubThunkX 149 stubThunkX 150 stubThunkX 151 stubThunkX 152 stubThunkX 153 stubThunkX 154 stubThunkX 155 stubThunkX 156 stubThunkX 157 stubThunkX 158 stubThunkX 159 stubThunkX 160 stubThunkX 161 stubThunkX 162 stubThunkX 163 stubThunkX 164 stubThunkX 165 stubThunkX 166 stubThunkX 167 stubThunkX 168 stubThunkX 169 stubThunkX 170 stubThunkX 171 stubThunkX 172 stubThunkX 173 stubThunkX 174 stubThunkX 175 stubThunkX 176 stubThunkX 177 stubThunkX 178 stubThunkX 179 stubThunkX 180 stubThunkX 181 stubThunkX 182 stubThunkX 183 stubThunkX 184 stubThunkX 185 stubThunkX 186 stubThunkX 187 stubThunkX 188 stubThunkX 189 stubThunkX 190 stubThunkX 191 stubThunkX 192 stubThunkX 193 stubThunkX 194 stubThunkX 195 stubThunkX 196 stubThunkX 197 stubThunkX 198 stubThunkX 199 stubThunkX 200 stubThunkX 201 stubThunkX 202 stubThunkX 203 stubThunkX 204 stubThunkX 205 stubThunkX 206 stubThunkX 207 stubThunkX 208 stubThunkX 209 stubThunkX 210 stubThunkX 211 stubThunkX 212 stubThunkX 213 stubThunkX 214 stubThunkX 215 stubThunkX 216 stubThunkX 217 stubThunkX 218 stubThunkX 219 stubThunkX 220 stubThunkX 221 stubThunkX 222 stubThunkX 223 stubThunkX 224 stubThunkX 225 stubThunkX 226 stubThunkX 227 stubThunkX 228 stubThunkX 229 stubThunkX 230 stubThunkX 231 stubThunkX 232 stubThunkX 233 stubThunkX 234 stubThunkX 235 stubThunkX 236 stubThunkX 237 stubThunkX 238 stubThunkX 239 stubThunkX 240 stubThunkX 241 stubThunkX 242 stubThunkX 243 stubThunkX 244 stubThunkX 245 stubThunkX 246 stubThunkX 247 stubThunkX 248 stubThunkX 249 stubThunkX 250 stubThunkX 251 stubThunkX 252 stubThunkX 253 stubThunkX 254 stubThunkX 255 stubThunkX 256