Page 1 of 1
SysFn69.2:SetThreadContext
Posted: Fri Oct 28, 2016 11:47 pm
by 0CodErr
А указатель на контекст как передаётся?
Code: Select all
Parameters:
* eax = 69 - function number
* ebx = 2 - subfunction number
* ecx = thread identifier
* edx = size of context structure, must be 0x28=40 bytes
Returned value:
* function does not return value
Format of context structure is shown in the description of
subfunction 1.
Re: SysFn69.2:SetThreadContext
Posted: Sat Oct 29, 2016 1:10 am
by Pathoswithin
А в русской документации написано...
Re: SysFn69.2:SetThreadContext
Posted: Fri Nov 04, 2016 5:08 pm
by 0CodErr
Ну в русской я нашёл
* esi = указатель на структуру контекста
Вот только непонятно, какая теперь должна быть структура этого контекста.
Сейчас в документации написано так
Code: Select all
Format of context structure: (FPU is not supported yet)
* +0: dword: eip
* +4: dword: eflags
* +8: dword: eax
* +12 = +0xC: dword: ecx
* +16 = +0x10: dword: edx
* +20 = +0x14: dword: ebx
* +24 = +0x18: dword: esp
* +28 = +0x1C: dword: ebp
* +32 = +0x20: dword: esi
* +36 = +0x24: dword: edi
Но документация давно не обновлялась, ведь теперь FPU уже поддерживается.
Re: SysFn69.2:SetThreadContext
Posted: Mon Nov 07, 2016 7:34 pm
by 0CodErr
В дебаггере
http://websvn.kolibrios.org/filedetails ... #line-2462 у нас вот так
Code: Select all
context:
_eip dd ?
_eflags dd ?
_eax dd ?
_ecx dd ?
_edx dd ?
_ebx dd ?
_esp dd ?
_ebp dd ?
_esi dd ?
_edi dd ?
_ctx_flags:
dd ?
dd ?
_sse_flags:
_fcw dw ?
_fsw dw ?
_ftw db ?
db ?
_fop dw ?
_fpu_ip dd ?
dw ?
dw ?
dq ?
dq ?
fpu_context:
mmx_context:
_st0:
_mm0: rq 2
_st1:
_mm1: rq 2
_st2:
_mm2: rq 2
_st3:
_mm3: rq 2
_st4:
_mm4: rq 2
_st5:
_mm5: rq 2
_st6:
_mm6: rq 2
_st7:
_mm7: rq 2
sse_context:
_xmm0 rq 2
_xmm1 rq 2
_xmm2 rq 2
_xmm3 rq 2
_xmm4 rq 2
_xmm5 rq 2
_xmm6 rq 2
_xmm7 rq 2
ctx_end:
Но, разумеется, нужны пояснения. Что за
_ctx_flags, например?
Re: SysFn69.2:SetThreadContext
Posted: Fri Nov 11, 2016 9:14 pm
by CleverMouse
Ядро в _ctx_flags всегда пишет 1, в следующий dword - 0 с комментарием "reserved". Я подозреваю, чтобы можно было сигнализировать случай, когда SSE-контекста нет, ибо машина не поддерживает SSE.
Re: SysFn69.2:SetThreadContext
Posted: Tue Nov 15, 2016 3:11 pm
by 0CodErr
CleverMouse, спасибо за объяснение.
Есть ещё безымянные поля.
Code: Select all
_fpu_ip dd ?
dw ? ; <----------
dw ? ; <----------
dq ? ; <----------
dq ? ; <----------
Re: SysFn69.2:SetThreadContext
Posted: Tue Nov 15, 2016 4:43 pm
by Serge
0CodErr
Поля из контекста fpu. Смотри описание fnsave/fxsave
Re: SysFn69.2:SetThreadContext
Posted: Tue Nov 15, 2016 4:48 pm
by 0CodErr
Serge, понятно. А короткая версия(EIP, EFlags, EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI) по-прежнему поддерживается?
Re: SysFn69.2:SetThreadContext
Posted: Tue Nov 15, 2016 5:40 pm
by Serge
Да, зависит от размера контекста в edx. Если 40 байт, то контекст цпу. Если 48+288, то cpu+sse.