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

_ftw    db ?
        db ?                  ; <----------

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.