SysFn69.2:SetThreadContext

Applications development, KoOS API questions
  • А в русской документации написано...
  • Ну в русской я нашёл
    * 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 уже поддерживается.
  • В дебаггере 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, например?
  • Ядро в _ctx_flags всегда пишет 1, в следующий dword - 0 с комментарием "reserved". Я подозреваю, чтобы можно было сигнализировать случай, когда SSE-контекста нет, ибо машина не поддерживает SSE.
    Сделаем мир лучше!
  • CleverMouse, спасибо за объяснение.
    Есть ещё безымянные поля.

    Code: Select all

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

    Code: Select all

    _fpu_ip dd ?
            dw ?                  ; <----------
            dw ?                  ; <----------
     
            dq ?                  ; <----------
            dq ?                  ; <----------
  • 0CodErr
    Поля из контекста fpu. Смотри описание fnsave/fxsave
  • Serge, понятно. А короткая версия(EIP, EFlags, EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI) по-прежнему поддерживается?
  • Да, зависит от размера контекста в edx. Если 40 байт, то контекст цпу. Если 48+288, то cpu+sse.
  • Who is online

    Users browsing this forum: No registered users and 4 guests