Декомпилятор С++

Тема в разделе "WASM.RESEARCH", создана пользователем Vam, 16 июл 2008.

  1. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    WinXP sp3, исключений нет. Кстати, неужто сложно 2 строки написать чтобы добавить VEH ? Всеже лучше будет в логе ошибку видеть.
     
  2. Vam

    Vam New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2008
    Сообщения:
    149
    Не понял, о какой ошибке идет речь?
     
  3. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    О вылетающих окошках с Access violation, которые можно увидеть, если отладочной инфы нет или если pdb не того формата.
     
  4. Vam

    Vam New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2008
    Сообщения:
    149
    А чем мне сможет помочь VEH, я использую SEH и лог с исключением в дебаг режиме выглядит так:
    Код (Text):
    1. //===================== UNHANDLED EXCEPTION =====================
    2.  
    3. idag.exe caused a EXCEPTION_ACCESS_VIOLATION in module CppSourcer.plw at 001B:01E40830, vCModule::GetLineTable()+32 byte(s), d:\programs\idasdk52\plugins\cppsourcer\vmodule.h, line 201+32 byte(s)
    4. EAX=00000000  EBX=01C99E2C  ECX=00000000  EDX=020C547C  ESI=0012F1E4
    5. EDI=0012F1D4  EBP=0012F1D4  ESP=0012F184  EIP=01E40830  FLG=00010206
    6. CS=001B   DS=0023  SS=0023  ES=0023   FS=003B  GS=0000
    7.  
    8. //========================== CALLSTACK ==========================
    9.  
    10. 001B:01E40830 (0x00000001 0x0000A880 0x0012F2B8 0x0012F4D4) CppSourcer.plw, vCModule::GetLineTable()+32 byte(s), d:\programs\idasdk52\plugins\cppsourcer\vmodule.h, line 201+32 byte(s)
    11. 001B:01E3F0EF (0x052BAB08 0x0040B880 0x00000038 0x0012F43C) CppSourcer.plw, vCVInfo::SetFunctionSize()+207 byte(s), d:\programs\idasdk52\plugins\cppsourcer\vdebuginfo.cpp, line 2658+14 byte(s)
    12. 001B:01E4450D (0x01CDE394 0x0012F4C8 0x0012F4D4 0x01C99E2C) CppSourcer.plw, vCFunction::Create()+365 byte(s), d:\programs\idasdk52\plugins\cppsourcer\vfunction.cpp, line 134
    13. 001B:01EA6A40 (0x0040B880 0x00000000 0x0012F4B8 0x0012F538) CppSourcer.plw, vCSourcer::DecompileFunction()+288 byte(s), D:\PROGRAMS\IdaSDK52\plugins\CppSourcer\vSourcer.cpp, line 247+9 byte(s)
    14. 001B:01EA6E36 (0x0040B880 0x0012F5E0 0x0012F550 0x01C99E2C) CppSourcer.plw, vCSourcer::DecompilePacket()+54 byte(s), D:\PROGRAMS\IdaSDK52\plugins\CppSourcer\vSourcer.cpp, line 305+18 byte(s)
    15. 001B:01E7815F (0x052BAB08 0x0012F6EC 0x0012F5DC 0x01C99E2C) CppSourcer.plw, vCEntity::CreateFunction()+175 byte(s), d:\programs\idasdk52\plugins\cppsourcer\vmodule.cpp, line 94
    16. 001B:01E7CB1E (0x0012F75C 0x0012F704 0x01C99E2C 0xCCCCCCCC) CppSourcer.plw, vCModule::CreateEntityes()+350 byte(s), d:\programs\idasdk52\plugins\cppsourcer\vmodule.cpp, line 862+9 byte(s)
    17. 001B:01E7EF2D (0x00000001 0x0012F824 0x0012F77C 0x01C99E2C) CppSourcer.plw, vCModule::Compile()+365 byte(s), d:\programs\idasdk52\plugins\cppsourcer\vmodule.cpp, line 1218
    18. 001B:01EA9D9B (0x0012F888 0x400E7DFC 0x01C99E2C 0xCCCCCCCC) CppSourcer.plw, vCSourcer::ProcessModules()+219 byte(s), D:\PROGRAMS\IdaSDK52\plugins\CppSourcer\vSourcer.cpp, line 757+12 byte(s)
    19. 001B:01DF7BA5 (0x00000000 0x400E7DFC 0x01C99E2C 0xCCCCCCCC) CppSourcer.plw, DecompileContent()+693 byte(s), d:\programs\idasdk52\plugins\cppsourcer\cppsourcer.cpp, line 87
    20. 001B:01DF7D7F (0x00000000 0x010C0D6C 0x63415407 0x6E6F6974) CppSourcer.plw, DecompileAll()+79 byte(s), d:\programs\idasdk52\plugins\cppsourcer\cppsourcer.cpp, line 104+5 byte(s)
    21. 001B:00470888 (0x010C0D6C 0x400E71A6 0x01001E9C 0x400E7DFC) idag.exe, System()+19924 byte(s)
    22. 001B:400387F2 (0x0012FA78 0x0012FA54 0x400FEAF7 0x0012FA78) rtl60.bpl, Classes()+18 byte(s)
    23. 001B:400FEADB (0x400F25D4 0x010012C8 0x00001E9C 0x0012FADC) vcl60.bpl, Menus()+183 byte(s)
    24. 001B:400F262F (0x01100F00 0x0012FAD4 0x0012FB54 0x01100FEF) vcl60.bpl, Forms()+91 byte(s)
    25. 001B:400F5793 (0x003D0001 0x00000000 0x0012FB18 0x77D48709) vcl60.bpl, Forms()+83 byte(s)
    26.  
    27. //===============================================================
     
  5. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    Vam
    Ну SEH валиден для ф-ции, а VEH для процесса.
    Для некоторых ошибок видимо не установлены SEH, раз появляется окно с исключением, на первое время можно просто добавить пару строк в плагин:

    Код (Text):
    1. void ErrorMessage() { msg("error, bla bla bla"); }
    2.  
    3. void __stdcall run(int arg)
    4. {
    5.     AddVectoredExceptionHandler(0, (PVECTORED_EXCEPTION_HANDLER)ErrorMessage);
    6.         ...
    И все. Кстати на каком-то приложении CppSourcer просто вырубился(стек не валиден стал скорее всего), для таких случаев VEH даст возможность увидеть в логе хоть чтото.
     
  6. Vam

    Vam New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2008
    Сообщения:
    149
    На все функции плагина, вызываемые из ИДА установлены SEH обработчики.
    Они 2х типов:
    1. Корректируемые - осуществляется воостановление состояния до исключения и продолжение работы (запись в соответствующий rpt файл, отсутствие окна исключения).
    2. Фатальные - восстановить состояние программы не представляется возможным (запись в СppSourcer.rpt, вывод окна с исключением, по нажатию ОК завершение работы плагина, ИДА остается в рабочем состоянии).

    Добавить, конечно, можно, только что изменится...
    Почему-то у меня работает так, как и задумано (и дебаг и релиз версии), а вот у других по-другому...
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Что значит фатальная ошибка ?
    Такая только одна - не валидный стек потока. В любых других случаях исключение обрабатывается. Чем более высокого уровня механизм, обрабатывающий исключение, тем менее он гибкий. Для полного контроля следует перехватить KiUserExceptionDispatcher(), либо перенаправить KeUserExceptionDispatcher(глобально в системе), либо модифицировать код ядра(ветвление локально для процесса).
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Vam
    Первый раз пролистав листинг вашего кодеса сделал вывод что он кривой, у вас в одной из процедур проверка Build >= 32768, такого не существует насколько знаю.
     
  9. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    Ну как минимум - исчезнут мессадж боксы с исключениями типа access violation =)

    Это нормально пока, просто нужно тестить как можно больше и исправлять ошибки.
     
  10. Vam

    Vam New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2008
    Сообщения:
    149
    Фатальная для меня, не для потока, обработать исключение в этом случае можно, только продолжить работу вот уже нельзя, поэтому такой случай завершится с выходом из плагина с сообщением ошибки. Сейчас делается немного по-другому: обработчик такого исключения создает rpt файл с сообщением и передает дальнейшую обработку исключения системе, которая выводит окно исключения и осуществляет выход из плагина.

    Не понял о каком "кодесе" идет речь?

    Эти боксы я могу и сейчас убрать, изменив лишь EXCEPTION_CONTINUE_SEARCH на EXCEPTION_EXECUTE_HANDLER, но суть от этого не изменится. Бокс для меня служит индикацией завершения плагина, иначе было бы втемную. Писать сообщения на такие исключения не считаю нужным, вся требуемая инфа по его исправлению есть в RPT файле.
    В тестовом примере UnDecorator есть одно обработанное исключение в rpt, но в релиз версии, в отличии от дебаг версии, оно абсолютно не информативно.

    +100
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Vam
    Тот что в аттаче в #178.
     
  12. Vam

    Vam New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2008
    Сообщения:
    149
    Если о нем, то это просто как тестовый пример, когда-то давно разбирал эту функцию (UnDecorateSymbolName) из библиотеки dbghelp, но так до конца я его не отладил, отпала необходимость.
     
  13. ivanches

    ivanches New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2009
    Сообщения:
    25
    Хочу присоединиться к предыдущему оратору и из прочитанных мной 8-ми страницах этой темы, где-то мелькало "после завершения начального этапа можно подумать о выкладывании в опен сорсе"... где-то так!!!
     
  14. ivanches

    ivanches New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2009
    Сообщения:
    25
    З.Ы. Из нароботок можно и отдельный декомпиллер соорудить , для отдельно взятого проекта... во всяком случае многим это облегчело бы жизнь, кто мучается подобными задачами.
     
  15. ivanches

    ivanches New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2009
    Сообщения:
    25
    Попробовал , скомпилил админ_консоль , всё как расписано с файлом отладки... в иду плагин погрузил.... а результат=0! Крит еррор... кому интересно исходники и скомпиленный exe тут:
    http://depositfiles.com/files/q8tvsf5dy
     
  16. ivanches

    ivanches New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2009
    Сообщения:
    25
    Windows XP 5.1 SP3
    ........
    --- CPU detection ---
    Number of system processors: 2
    Number of available processors: 2
    Processor 0:
    CPU: AuthenticAMD AMD Athlon(tm) 7850 Dual-Core Processor
    Family: 15, Model: 2, Stepping: 3
    FPU: on-chip
    CPU Speed (estimated): 2812.708814 MHz
    MMX: present
    SSE: present
    3DNow!: present
    Serial number not present or disabled

    Processor 1:
    CPU: AuthenticAMD AMD Athlon(tm) 7850 Dual-Core Processor
    Family: 15, Model: 2, Stepping: 3
    FPU: on-chip
    CPU Speed (estimated): 2812.708902 MHz
    MMX: present
    SSE: present
    3DNow!: present
    Serial number not present or disabled
    ........
    IDApro 5.4
    Результат:
     
  17. Vam

    Vam New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2008
    Сообщения:
    149
    ivanches
    С Ида 5.4 может правильно и не работать, т.к. используется IDA SDK 5.2
     
  18. Vam

    Vam New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2008
    Сообщения:
    149
    ivanches
    С Ида 5.4 может правильно и не работать, т.к. используется IDA SDK 5.2

    Во вложении "правильный" результат декомпиляции.
     
  19. ivanches

    ivanches New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2009
    Сообщения:
    25
    Интересно , но в правильном результате есть файлик UnDecoratorMsvc.rpt, а в мануале сказано вроде, что де .rpt только при критах появляется...
     
  20. ivanches

    ivanches New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2009
    Сообщения:
    25
    А может реальней и проще ,как-то .Net reflector переделать, чтоб unmanaged C++ декомпилил, managed декомпилит....
    .....
    З.Ы. Прошу прощения у автора ветки, это просто размышления/поиски/фантазии , т.к. в этом почти нуб полный...