Сама 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)
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 либо какой другой дизассемблер и не мучаться .