дизасемблер windows

Тема в разделе "WASM.BEGINNERS", создана пользователем clockover, 17 янв 2006.

  1. clockover

    clockover New Member

    Публикаций:
    0
    Регистрация:
    16 ноя 2005
    Сообщения:
    2
    Адрес:
    Russia
    Сама windows умеет дамп разворачивать в код на asm - а можно ли натравить ее на код чтоб она развернула его в листинг на asm?



    к примеру, кусок дампа:



    State Dump for Thread Id 0x3d8



    eax=77562bdf ebx=00000002 ecx=00000000 edx=00000000 esi=77f87e6c edi=00000002

    eip=77f87e77 esp=01caff24 ebp=01caff70 iopl=0 nv up ei pl zr na po nc

    cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000246





    function: ZwWaitForMultipleObjects

    77f87e6c b8e9000000 mov eax,0xe9

    77f87e71 8d542404 lea edx,[esp+0x4] ss:0271d4fb=????????

    77f87e75 cd2e int 2e

    77f87e77 c21400 ret 0x14

    77f87e7a 668b08 mov cx,[eax] ds:77562bdf=8b55

    77f87e7d 40 inc eax

    77f87e7e 40 inc eax

    77f87e7f 8945a4 mov [ebp+0xa4],eax ss:0271d546=????????

    77f87e82 6685c9 test cx,cx

    77f87e85 75f3 jnz RtlExpandEnvironmentStrings_U+0x26 (77f8e57a)

    77f87e87 663930 cmp [eax],si ds:77562bdf=8b55

    77f87e8a 75ee jnz ZwFsControlFile+0x54 (77f8bf7a)

    77f87e8c 40 inc eax

    77f87e8d 40 inc eax

    77f87e8e 8945a4 mov [ebp+0xa4],eax ss:0271d546=????????

    77f87e91 8b7510 mov esi,[ebp+0x10] ss:0271d546=????????

    77f87e94 85f6 test esi,esi

    77f87e96 0f8448eaffff je NtMapViewOfSection+0xb6 (77f868e4)
     
  2. Alexey2005

    Alexey2005 New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2006
    Сообщения:
    19
    Адрес:
    Russia
    Windows содержит встроенный отладчик, который и используется при формировании таких логов. Причём он содержит не только встроенный дизассемблер, но и "трассировщик", и ассемблер, и много чего ещё.

    К сожалению, доступ к нему можно получить только через COM-интерфейсы. И вообще информация об этом компоненте Windows весьма скудная (всего несколько строчек в Microsoft WinDBG SDK плюс заголовочные файлы этого же SDK).

    Судя по всему, "натравить" его на код можно примерно так:

    1. Создать объект отладчика вызовом функции DebugCreate из библиотеки dbgeng.dll. Функция вернет интерфейс IDebugClient. Затем, вызвав метод этого интерфейса

    IDebugClient->CreateProcess, грузим процесс для "отладки" (можно воспользоваться другим методом - CreateProcessAndAttach чтобы присоединиться к уже запущенному процессу).

    2. Вызвать метод IDebugClient->SetOutputCallbacks (написав предварительно callback-функцию, которая и будет принимать строчки дизассемблированного кода).

    3. Вызывать метод IDebugClient->QueryInterface, затребовав у объекта отладки интерфейс IDebugControl.

    4. Настраиваем параметры дизассемблера вызовом целого ряда SetXX...

    5. Вызываем метод IDebugControl->OutputCurrentState. При этом наша callback-функция получит содержимое регистров, дамп стека+дизассемблерный код (и всё это - уже в виде текста).

    Но, как уже говорилось, повозиться со всем этим придётся, ибо с документацией напряг. По-моему, лучше запустить IDA либо какой другой дизассемблер и не мучаться :).