mirror of
https://github.com/decompals/wibo.git
synced 2025-12-12 06:45:05 +00:00
327 lines
6.2 KiB
ArmAsm
327 lines
6.2 KiB
ArmAsm
#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
|