dbgeng.dll

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

  1. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Кто-нибудь юзал ее COM-интерфейсы для отладки ядра на другой машине?
    А именно, IDebugClient, IDebugControl и др.

    Я попробовал заюзать, у меня не работает :dntknw:
    Подскажете что-нибудь дельное?
    Код (Text):
    1. #include <windows.h>
    2. #include <stdio.h>
    3. #include <dbgeng.h>
    4.  
    5. void check (HRESULT hr, char *fname)
    6. {
    7.     if (hr != S_OK)
    8.     {
    9.         printf("%s failed with status %08x\n", fname, hr);
    10.         ExitProcess (hr);
    11.     }
    12. }
    13.  
    14. int main()
    15. {
    16.     HRESULT Result;
    17.     IDebugClient * debugClient;
    18.     IDebugControl* debugControl;
    19.     IDebugDataSpaces* debugDataSpaces;
    20.     ULONG64 Address64 = 0xFFFFFFFFFFDFF000;
    21.     ULONG Buffer = 0;
    22.     ULONG Read = 0;
    23.  
    24.     //
    25.     // Create IDebugClient instance
    26.     //
    27.  
    28.     Result = DebugCreate( __uuidof(IDebugClient), (void **)&debugClient );
    29.     check (Result, "DebugCreate");
    30.     printf("DebugCreate succeeded, IDebugClient created\n");
    31.  
    32.     //
    33.     // Attach to VMWare
    34.     //
    35.  
    36.     Result = debugClient->AttachKernel (DEBUG_ATTACH_KERNEL_CONNECTION, "com:pipe,port=\\\\router\\pipe\\com_1,reconnect");
    37.     //Result = debugClient->AttachKernel (DEBUG_ATTACH_LOCAL_KERNEL, 0);
    38.     check (Result, "IDebugClient::AttachKernel");
    39.     printf("IDebugClient::AttachKernel succeeded\n");
    40.  
    41.     //
    42.     // Get IDebugControl interface
    43.     //
    44.  
    45.     Result = debugClient->QueryInterface (__uuidof(IDebugControl), (PVOID*)&debugControl);
    46.     check (Result, "IDebugClient::QueryInterface(IDebugControl)");
    47.     printf("IDebugClient::QueryInterface succeeded (got IDebugControl instance)\n");
    48.  
    49.     //
    50.     // Stop machine
    51.     //
    52.  
    53.     Result = debugControl->SetExecutionStatus (DEBUG_STATUS_BREAK);
    54.     check (Result, "IDebugControl::SetExecutionStatus");
    55.     printf("IDebugControl::SetExecutionStatus succeeded\n");
    56.  
    57.     //
    58.     // Get IDebugDataSpaces interface
    59.     //
    60.  
    61.     Result = debugClient->QueryInterface (__uuidof(IDebugDataSpaces), (PVOID*)&debugDataSpaces);
    62.     check (Result, "IDebugClient::QueryInterface(IDebugDataSpaces)");
    63.     printf("IDebugClient::QueryInterface succeeded (got IDebugDataSpaces instance)\n");
    64.  
    65.     //
    66.     // Read virtual memory
    67.     //
    68.  
    69.     Result = debugDataSpaces->ReadVirtual (Address64, &Buffer, sizeof(Buffer), &Read);
    70.     check (Result, "IDebugDataSpaces::ReadVirtual");
    71.  
    72.     printf("IDebugDataSpaces::ReadVirtual succeeded: read from %08x : %08x\n", (ULONG)Address64, Buffer);
    73.  
    74.     return 0;
    75. }
    Оно падает на SetExecutionStatus - она возвращает ошибку. Если ее вызов закомментировать, то ReadVirtual возвращает ошибку.

    80070057 - the parameter is incorrect
    А ReadVirtual падает с 8000ffff.
     
  2. comrade

    comrade Константин Ёпрст

    Публикаций:
    0
    Регистрация:
    16 сен 2002
    Сообщения:
    232
    Адрес:
    Russian Federation
    Попробуй спросить MSDN forums http://forums.microsoft.com/MSDN/default.aspx?siteid=1, www.osronline.com, и так же на Usenet (microsoft.public.windbg)
     
  3. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    Подниму темку. Та же проблема, как решать?
     
  4. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    Squash
    Читать документацию до просветления.

    Самый обычный способ ...
    Google дум
    IDebugClient::AttachKernel
    Получаем линку на http://msdn.microsoft.com/en-us/library/windows/hardware/ff538145%28v=vs.85%29.aspx
    Читаем ремарку (Remarks)

    Note The engine doesn't completely attach to the kernel until the WaitForEvent method has been called. Only after the kernel has generated an event -- for example, the initial breakpoint -- does it become available in the debugger session.


    И так у нас стоет вопрос : Где твою мать цикл отладки ? Вот после того как получим события, тогда и можно будет
    брякатся и все такое делать, а иначе незя.
     
  5. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    shchetinin, спасибо, покурю доки.