ZwSetContextThread. Проблемы с фреймами

Тема в разделе "WASM.NT.KERNEL", создана пользователем loginrl_103, 29 май 2008.

  1. loginrl_103

    loginrl_103 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2008
    Сообщения:
    271
    имеется

    Код (Text):
    1. ...
    2. CONTEXT con;
    3. status = ZwOpenThread(&hThread, THREAD_ALL_ACCESS, &ObjectAttributes, &(pProcesses->Threads[i].ClientId));
    4.  if (!NT_SUCCESS(status)) DbgPrint ("ZwOpenThread status: %x\n", status);
    5.  
    6. pZwSuspendThread = (ZwSuspendThread *)0x805DC61B;//хардадрес
    7. status = pZwSuspendThread (hThread, &prev_mod);
    8. if (!NT_SUCCESS(status)) DbgPrint ("ZwSuspendThread status: %x\n", status);
    9.  
    10. con.ContextFlags = CONTEXT_FULL;
    11. pZwGetContextThread =(ZwGetContextThread *)0x805DC5B0;//хардадрес
    12. status = pZwGetContextThread (hThread, &con);
    13. if (!NT_SUCCESS(status)) DbgPrint ("ZwGetContextThread status: %x\n", status);
    14.    
    15. pZwSetContextThread = (ZwSetContextThread *)0x8062C85B;//хардадрес
    16. status = pZwSetContextThread (hThread, &con);
    17. if (!NT_SUCCESS(status)) DbgPrint ("ZwSetContextThread status: %x\n", status);
    18.  
    19. pZwResumeThread = (ZwResumeThread *)0x8057F8D5;//хардадрес
    20. status = pZwResumeThread (hThread, &prev_mod);
    21. if (!NT_SUCCESS(status)) DbgPrint ("ZwResumeThread status: %x\n", status);
    22. ...
    Также имеется бсод. Собсно вылетаю на попытке установки контекста. Ошибка - set_invalid_of_context. По сырцам реактос -
    Код (Text):
    1. /* Don't allow ESP to be lowered, this is illegal */
    2. if (Esp < Previous) KeBugCheckEx(SET_OF_INVALID_CONTEXT,
    3.                                               Esp,
    4.                                               Previous,
    5.                                               (ULONG_PTR)TrapFrame,
    6.                                               0);
    в дампе
    Код (Text):
    1. Arg1: e1035008, New stack pointer
    2. Arg2: f31d8dd8, Old stack pointer  
    3. Arg3: f31d8d64, TrapFrame address
    4. Arg4: 00000000, 0
    5. ....
    6. ....
    7. STACK_TEXT:  
    8. f31d8b5c 8051db15 00000030 e1035008 f31d8dd8 nt!KeBugCheckEx+0x1b
    9. f31d8b80 804e6329 f31d8d64 e1035008 f8985550 nt!KiEspToTrapFrame+0x47
    10. f31d8ba0 8062ef2b 001d8d64 00000000 f8985594 nt!KeContextToKframes+0xe4
    11. f31d8bbc 805fba6c f31d8d64 00000000 f8985594 nt!PspSetContext+0x18
    12. f31d8bdc 804ed15a f8985550 f31d8c28 f31d8c1c nt!PspGetSetContextSpecialApc+0x39
    13. f31d8c2c 804ed199 00000000 00000000 00000000 nt!KiDeliverApc+0xb3
    14. f31d8c44 804dc6f2 000025ff e12a46a0 00000000 nt!KiSwapThread+0x64
    15. f31d8c6c bf802ec4 00000001 0000000d 00000001 nt!KeWaitForSingleObject+0x1c2
    16. f31d8ca8 bf801aa8 000025ff 00000000 00000001 win32k!xxxSleepThread+0x192
    17. f31d8cec bf80f106 f31d8d18 000025ff 00000000 win32k!xxxRealInternalGetMessage+0x418
    18. f31d8d4c 804df06b 0007fefc 00000000 00000000 win32k!NtUserGetMessage+0x27
    19. f31d8d4c 00000000 0007fefc 00000000 00000000 nt!KiFastCallEntry+0xf8
    20. WARNING: Frame IP not in any known module. Following frames may be wrong.
    21. f31d8dd4 0007febc 00000023 804fa477 f81f6b85 0x0
    22. f31d8ddc 804fa477 f81f6b85 818a6508 00000000 0x7febc
    23. f31d8ed4 7c914d8f 00000110 77ddd248 00000010 nt!KiThreadStartup+0x16
    24. f31d8f38 7c91056d 77dde0ae 00090000 00000000 ntdll!RtlAppendUnicodeToString+0x50
    25. f31d8ff4 00000000 00000000 00000000 00000000 ntdll!RtlFreeHeap+0x647
    26.  
    27. STACK_COMMAND:  kb
    28. FOLLOWUP_IP:
    29. win32k!xxxSleepThread+192
    30. bf802ec4 8945fc          mov     dword ptr [ebp-4],eax
    31. SYMBOL_STACK_INDEX:  8
    32. SYMBOL_NAME:  win32k!xxxSleepThread+192
    33. FOLLOWUP_NAME:  MachineOwner
    34. MODULE_NAME: win32k
    35. IMAGE_NAME:  win32k.sys
    36. DEBUG_FLR_IMAGE_TIMESTAMP:  41107f7a
    37. FAILURE_BUCKET_ID:  0x30_win32k!xxxSleepThread+192
    38. BUCKET_ID:  0x30_win32k!xxxSleepThread+192
    Если честно - вопросов много. Не совсем понятно такое значение "Arg1: e1035008, New stack pointer"...Откуда оно взялось? С trapframe тоже непонятки...Откуда должно браться "правильное" значение esp? Проясните ситуацию.

    пс. Буду очень признателен если толкнёте на хорошие источники касательно анализадампов/работа_нитей_в_ядре(реактос пока сам копаю).
     
  2. loginrl_103

    loginrl_103 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2008
    Сообщения:
    271
    итаг через ZwSetContextThread нельзя менять ряд регитсров и флагов, eip также. Хогланд саааамую малость описывает эту технику) Ничего более информативного пока не нашёл.) Есть варианты?)
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Лучше wrk копать.
    а по сабжу - ты же никак не инициализируешь CONTEXT.
     
  4. loginrl_103

    loginrl_103 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2008
    Сообщения:
    271
    PsGetContextThread выдаёт контекст указанного потока через структуру PETHREAD...
    PsGetCurrentThread выдаёт эту структуру для текущей нити - это нить юзер спейс, но как он определяет _текущую _ нить? Если я её открыл через zwopenthread - то эта нить текущая? Или текущая та нить, на которой было прервано выполнение процесса...или...или как?

    //добавлено

    по врк/реактос немного разобрался - PsGetCurrentThread/KeGetCurrentThread берут структуру из KPCR структуру KTHREAD CurrentThread...но кем она заполняется? Какие функции изменяют её и в какие моменты (касательно потоков)? Кто знает?)
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Я щас пишу статью насчет процессов и потоков, если интересно, могу скинуть написанную часть - там есть про контексты потоков и все такое.
     
  6. loginrl_103

    loginrl_103 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2008
    Сообщения:
    271
    Ага, давай. Нашёл твою тему http://wasm.ru/forum/viewtopic.php?id=21856 - ты там затрагиваешь несколько интересующих меня вопросов, надеюсь они будут освещены в статье.
     
  7. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    Скинь мне тоже !!! =)
     
  8. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    Great
    опубликуйте статью ;)
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    t00x
    допишу - опубликую)
     
  10. VENOM4X

    VENOM4X New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2008
    Сообщения:
    29
    Скинь и мне плиз.
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Не давай им! :)

    Great: :lol: