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

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

  1. Vam

    Vam New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2008
    Сообщения:
    149
    Может быть, но он будет точно разным для разных типов исполняемых файлов, а это дополнительная морока.
    Этим пока и пользуюсь, но ИДА не определяет версию компилятора, она определяет только тип компилятора.
    Вообще-то поля с номером версии компилятора в PE заголовке я не нашел, хотя где-то ранее и встречал, но не помню, в каком заголовке есть эта версия?
     
  2. Vam

    Vam New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2008
    Сообщения:
    149
    Найдено. Прошу помощи для определения версий VS (и не только) линковщиков:
    Написал утилитку (во вложении), которая выдает номер версии линковщика исполняемого файла. Кто использует VS (или Borland) разных версий, прошу пробежаться утилитой по исполняемому файлу и сообщить версию среды и версию линковщика, например, VS6 - линковщик 6.0
    Запуск из командной строки - LinkerVersion <filename>
     
  3. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    Vam
    Я думал, что ты хочешь таким образом получить конкретную ф-цию для определения её прототипа по дебаг инфе...
    Тогда я не понимаю, что собственно нужно. :-(

    У меня утилита правильно распознала версию линкера для бинарников, сделанных в VS6, VS7.1, VS8, VS9.
     
  4. Vam

    Vam New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2008
    Сообщения:
    149
    green
    Нужно сообщить мне версии, VS9 - линковщик ??? и т.д.
    P.S.: Утилита просто сообщает номер версии линковщика, а тип компилятора она не определяет, а мне надо связать тип компилятора с номером версии линковщика.
     
  5. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    Vam
    6-й студии сейчас нет под рукой, а для остальных вот:
    Код (Text):
    1. Linker(ProductVersion|FileVersion):Compiler(ProductVersion|FileVersion)
    2. 7.10.4035|7.10.4035:7.10.4035|13.10.4035
    3. 8.00.50727|8.00.50727:8.00.50727|14.00.50727
    4. 9.00.30729|9.00.30729:9.00.30729|15.00.30729
    Это я к вопросу о виртуальных ф-циях.
     
  6. Vam

    Vam New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2008
    Сообщения:
    149
    green, спасибо.
    По Borland'у может кто-нибудь предоставить аналогичную инфу?
    Вопрос по виртуальным функциям для меня уже закрыт, двигаюсь дальше...
     
  7. Dakis

    Dakis New Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2008
    Сообщения:
    1
    vs6 sp6: link.exe: 6.00.8447.0, cl.exe: 6.00.8804.0 (fileversion: 12.00.8804.0)
     
  8. Vam

    Vam New Member

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

    PS: Ограничение на полную функциональность - 30 дней.
     
  9. Vam

    Vam New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2008
    Сообщения:
    149
    Ошибки декомпиляции есть? Если встречаются ошибки, то log файл можно выслать на почту vam-it@yandex.ru
    Исправить их пока не обещаю, но помочь ответом постараюсь...
    Декомпилируются все объектники из которых собран проект и которые находятся в пути проекта. Объектники включенные в экзешник из библиотек (lib) не декомпилируются.
    Например, информация из AllModules.log:
    D:\PROGRAMS\GothicUtil\ouToScript\Debug\ouToScript.obj (0) - декомпилируется
    D:\PROGRAMS\GothicUtil\ouToScript\Debug\ouInstall.obj (1) - декомпилируется
    ...
    D:\PROGRAMS\GothicUtil\ouToScript\Debug\xxxNames.obj (5) - декомпилируется
    F:\9782\VC98\crtbld\crt\src\build\intel\xst_obj\rename.obj (6) - не декомпилируется
    все дальнейшие модули игнорируются

    или другая ситуация:
    p:\work\MyTools\ChangeResolution\Debug\ChangeResolution.obj (0) - декомпилируется
    KERNEL32.dll (1) - не декомпилируется
    все дальнейшие модули игнорируются

    Так что попробуй разобрать lib на объектники и всунуть их в директорию компиляции.

    А вот это в ближайшее время не представляется возможным.
     
  10. Vam

    Vam New Member

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

    С одной стороны это просто, а с другой чревато большими ошибками, если декомпилятор может определить тип компилятора по экзешнику, то определить чем скомпилированы, а тем более на чем написаны прилинкованные модули прога пока не в силах, поэтому всё что находится не в пути проекта игнорируется. Для того, чтобы правильно декомпилировать такой модуль нужен дополнительный анализ, а его пока нет.
     
  11. Vam

    Vam New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2008
    Сообщения:
    149
    Вышли мне пару лог файлов - AllModules.log и лог проекта
     
  12. Dump

    Dump New Member

    Публикаций:
    0
    Регистрация:
    23 сен 2008
    Сообщения:
    7
    попробовал разобрать ради интереса одну игрушку разных версий с дебаг инфой,
    закончилось для декомпилера все печально во всех четырех случаях..

    1)
    Info: Decompile: Function WinMain (area: 0x004AB7A0-0x004AB9C6)
    Error: Stack: Out of stack! (11/-44)
    Error: Stack: Out of stack! (11/-44)

    //===================== UNHANDLED EXCEPTION =====================

    idag.exe caused a EXCEPTION_ACCESS_VIOLATION in module CppSourcer.plw at 001B:0559E653
    EAX=021C0000 EBX=00000000 ECX=0108015C EDX=0012F2B0 ESI=01080176
    EDI=01080176 EBP=01080172 ESP=0012F288 EIP=0559E653 FLG=00010206
    CS=001B DS=0023 SS=0023 ES=0023 FS=003B GS=0000

    //========================== CALLSTACK ==========================

    001B:0559E653 (0x021C0000 0x00000108 0x00000000 0x2F880000) CppSourcer.plw

    //===============================================================


    2)
    Info: Decompile: Function WinMain (area: 0x0040B2D0-0x0040B6C4)
    Warn: Call: Must be Block CALL!


    ++++++++++++++++++++++++++++++++++++
    Section 000
    ++++++++++++++++++++++++++++++++++++

    PROLOG: (0040B2D0) Start: 0, End: 3, Adjust: DONE
    CALL: (0040B2D6) Start: 4, End: 38, Adjust: DONE, RetValue: 1, NumArg: 2, NoPrint: 0
    CALL: (0040B2D9) Start: 6, End: 13, Adjust: DONE, RetValue: 1, NumArg: 5, NoPrint: 0
    CALL: (0040B2E2) Start: 10, End: 11, Adjust: DONE, RetValue: 1, NumArg: 1, NoPrint: 0
    CALL: (0040B2F6) Start: 15, End: 20, Adjust: DONE, RetValue: 0, NumArg: 3, NoPrint: 0
    CALL: (0040B313) Start: 21, End: 21, Adjust: DONE, RetValue: 0, NumArg: 0, NoPrint: 0
    CALL: (0040B31D) Start: 23, End: 36, Adjust: DONE, RetValue: 0, NumArg: 2, NoPrint: 0
    CALL: (0040B360) Start: 40, End: 43, Adjust: DONE, RetValue: 1, NumArg: 2, NoPrint: 0
    CALL: (0040B373) Start: 45, End: 47, Adjust: DONE, RetValue: 0, NumArg: 1, NoPrint: 0
    IFELSE: (0040B37D) Start: 48, End: 51, Adjust: NOT_START, Jmp: 58, Logic: NONE, Bracket: )-0
    IFELSE: (0040B38E) Start: 52, End: 54, Adjust: NOT_START, Jmp: 58, Logic: NONE, Bracket: (-0
    CALL: (0040B3D7) Start: 74, End: 75, Adjust: NOT_START, RetValue: 1, NumArg: 4, NoPrint: 0
    CALL: (0040B39C) Start: 56, End: 57, Adjust: DONE, RetValue: 0, NumArg: 1, NoPrint: 0
    CALL: (0040B3A3) Start: 59, End: 65, Adjust: DONE, RetValue: 0, NumArg: 2, NoPrint: 0
    CALL: (0040B3BF) Start: 67, End: 73, Adjust: DONE, RetValue: 0, NumArg: 2, NoPrint: 0

    3-4 на скринах ниже:
    [​IMG]
    [​IMG]
     
  13. Dump

    Dump New Member

    Публикаций:
    0
    Регистрация:
    23 сен 2008
    Сообщения:
    7
    чуть не забыл, стоит вынь xp sp3, вполне возможно плуг не совсем корренктно пашет с этим сервиспаком
     
  14. Vam

    Vam New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2008
    Сообщения:
    149
    Да, похоже есть проблема с работой под разными осями, вылетал с исключениями, но его проект я декомпилировал у себя без единого исключения, у Dump'а аналогично - куча исключений.
    Я тестировал плагин на двух операционках - WinXP SP2 (двухядерник) и Win2003 сервак, исключений (вылетов из программы) не было, воообще-то обрабатываемые исключения внутри разбора функций встречаются, но инфа о них заносится только в логи, обработка текущей функции прекращается и начинается обработка следующей функции.
    Вопрос Dump'у: что это за куча окошек с исключениями, они сами друг за другом появляются и прога продолжает работу или после каждого стопорится и надо давить OK. Написал бы ещё чем скомпилена игрушка и полная ли дебаг инфа, если дебаг инфа не полная (об этом прога молчит, т.к. не знает) или декомпилер не находит требуемые pdb файлы (о чем сообщает), то декомпиляция такого проекта обречена на неудачу.
     
  15. Dump

    Dump New Member

    Публикаций:
    0
    Регистрация:
    23 сен 2008
    Сообщения:
    7
    стопорится и приходится давить ок в бешенном темпе... потом продолжает работать, но эксепшены снова мгновенно появляются и снова приходится давить =) а скомпиленна гама.. чтото на VS 2003, чтот на VS2005 вроде, а часть инструментов в борланде, но с ними не извращался, хотя.. в pdb Microsoft C/C++ MSF 7.00, что = vs2003 вродь, дебаг инфа.. скорее всего не совсем полная, .obj файла и прочей фигни нема кроме самих pdb'шников
     
  16. Dump

    Dump New Member

    Публикаций:
    0
    Регистрация:
    23 сен 2008
    Сообщения:
    7
    да, забыл спросить, прожект будет коммерческим как у злобного автора Оли? или можно надеяться на чтото типа народно-любимого OllyDbg =)
     
  17. Dump

    Dump New Member

    Публикаций:
    0
    Регистрация:
    23 сен 2008
    Сообщения:
    7
    тьфу злобного афтора IDA :)
     
  18. Vam

    Vam New Member

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

    Насчет исключений, у вас в Винде есть такая библиотека PSAPI.DLL? Ещё вопрос, исключения, которые выводятся на экран в логи пишутся?
     
  19. Dump

    Dump New Member

    Публикаций:
    0
    Регистрация:
    23 сен 2008
    Сообщения:
    7
    есть psapi.dll... в system32\
    5.1.2600.5512 (xpsp.080413-2105)
    эксэпшены в логи не пишутся
     
  20. Vam

    Vam New Member

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