WinDBG Узнать кто запустил поток

Тема в разделе "WASM.SOFTWARE", создана пользователем ntcdm, 13 авг 2010.

  1. ntcdm

    ntcdm New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2007
    Сообщения:
    247
    Добрый вечер всем!

    Использую WinDBG в режиме kernel Debugging
    Как можно узнать кто создал данный поток (контекст которого сейчас активен) ?

    Код (Text):
    1. kd> k
    2. ChildEBP RetAddr  
    3. 00b5ee04 75b4fc8f lsm!CTSSession::Start
    4. 00b5ee20 75bb4c53 RPCRT4!Invoke+0x2a
    5. 00b5f228 755ed936 RPCRT4!NdrStubCall2+0x2d6
    6. 00b5f270 755ed9c6 ole32!CStdStubBuffer_Invoke+0xb6
    7. 00b5f2b8 755edf1f ole32!SyncStubInvoke+0x3c
    8. 00b5f304 7550213c ole32!StubInvoke+0xb9
    9. 00b5f3e0 75502031 ole32!CCtxComChnl::ContextInvoke+0xfa
    10. 00b5f3fc 755ea754 ole32!MTAInvoke+0x1a
    11. 00b5f42c 755edcbb ole32!AppInvoke+0xab
    12. 00b5f50c 755ea773 ole32!ComInvokeWithLockAndIPID+0x372
    13. 00b5f558 75b4f34a ole32!ThreadInvoke+0x302
    14. 00b5f594 75b4f4da RPCRT4!DispatchToStubInCNoAvrf+0x4a
    15. 00b5f5ec 75b4f3c6 RPCRT4!RPC_INTERFACE::DispatchToStubWorker+0x16c
    16. 00b5f614 75b50cef RPCRT4!RPC_INTERFACE::DispatchToStub+0x8b
    17. 00b5f64c 75b4f882 RPCRT4!RPC_INTERFACE::DispatchToStubWithObject+0xb2
    18. 00b5f698 75b4f7a4 RPCRT4!LRPC_SCALL::DispatchRequest+0x23b
    19. 00b5f6b8 75b4f763 RPCRT4!LRPC_SCALL::QueueOrDispatchCall+0xbd
    20. 00b5f6d4 75b4f5ff RPCRT4!LRPC_SCALL::HandleRequest+0x34f
    21. 00b5f708 75b4f573 RPCRT4!LRPC_SASSOCIATION::HandleRequest+0x144
    22. 00b5f740 75b4ee4f RPCRT4!LRPC_ADDRESS::HandleRequest+0xbd
    23. 00b5f7b8 75b4ece7 RPCRT4!LRPC_ADDRESS::ProcessIO+0x50a
    24. 00b5f7c4 75b51357 RPCRT4!LrpcServerIoHandler+0x16
    25. 00b5f7d4 76eed3c7 RPCRT4!LrpcIoComplete+0x16
    26. 00b5f7fc 76ef0778 ntdll!TppAlpcpExecuteCallback+0x1c5
    27. 00b5f964 77061194 ntdll!TppWorkerThread+0x5a4
    28. 00b5f970 76f1b495 kernel32!BaseThreadInitThunk+0xe
    29. 00b5f9b0 76f1b468 ntdll!__RtlUserThreadStart+0x70
    30. 00b5f9c8 00000000 ntdll!_RtlUserThreadStart+0x1b
     
  2. deshiko

    deshiko New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    42
    Код (Text):
    1. .thread
    получаешь адрес структуры текущего
    или
    Код (Text):
    1. !thread
    2. .process
    адрес текущего процесса
    Код (Text):
    1. !process адрес
     
  3. ntcdm

    ntcdm New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2007
    Сообщения:
    247
    Спасибо конечно за подсказку, про process и thread я знал )

    Я имел ввиду как узнать какой поток запустил этот поток?

    Допустим в потоке А есть код:

    Код (Text):
    1. void ThreadA(void*)
    2. {
    3. QueueUserWorkItem(ThreadB, 10);
    4. }
    а в потоке В такой:
    Код (Text):
    1. void ThreadВ(void*)
    2. {
    3.  
    4. }
    Находясь в потоке В могу ли я как-то увидеть, что создал поток В, поток А ?
     
  4. 0x6b65

    0x6b65 Забанен

    Публикаций:
    0
    Регистрация:
    8 окт 2009
    Сообщения:
    92
    ntcdm
    В общем случае – никак. Можно поставить трассировку на создание нитей и посмотреть лог. Трассировку можно организовать средствами WinDbg: точка останова на выходе функции создания нити с выражением, печатающим текущую и созданную нить и командой gc в конце.
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    ntcdm
    Винда это не сохраняет. Так что никак.
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Great
    OB_FLAG_CREATOR_INFO -> OBJECT_HEADER_CREATOR_INFO, если GF -> FLG_MAINTAIN_OBJECT_TYPELIST до загрузки оси. Вопрос в том, поддерживает ли это WinDbg.
     
  7. sb

    sb New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2010
    Сообщения:
    1
    Код (Text):
    1. !gflag + otl