Может быть, но он будет точно разным для разных типов исполняемых файлов, а это дополнительная морока. Этим пока и пользуюсь, но ИДА не определяет версию компилятора, она определяет только тип компилятора. Вообще-то поля с номером версии компилятора в PE заголовке я не нашел, хотя где-то ранее и встречал, но не помню, в каком заголовке есть эта версия?
Найдено. Прошу помощи для определения версий VS (и не только) линковщиков: Написал утилитку (во вложении), которая выдает номер версии линковщика исполняемого файла. Кто использует VS (или Borland) разных версий, прошу пробежаться утилитой по исполняемому файлу и сообщить версию среды и версию линковщика, например, VS6 - линковщик 6.0 Запуск из командной строки - LinkerVersion <filename>
Vam Я думал, что ты хочешь таким образом получить конкретную ф-цию для определения её прототипа по дебаг инфе... Тогда я не понимаю, что собственно нужно. :-( У меня утилита правильно распознала версию линкера для бинарников, сделанных в VS6, VS7.1, VS8, VS9.
green Нужно сообщить мне версии, VS9 - линковщик ??? и т.д. P.S.: Утилита просто сообщает номер версии линковщика, а тип компилятора она не определяет, а мне надо связать тип компилятора с номером версии линковщика.
Vam 6-й студии сейчас нет под рукой, а для остальных вот: Код (Text): Linker(ProductVersion|FileVersion):Compiler(ProductVersion|FileVersion) 7.10.4035|7.10.4035:7.10.4035|13.10.4035 8.00.50727|8.00.50727:8.00.50727|14.00.50727 9.00.30729|9.00.30729:9.00.30729|15.00.30729 Это я к вопросу о виртуальных ф-циях.
green, спасибо. По Borland'у может кто-нибудь предоставить аналогичную инфу? Вопрос по виртуальным функциям для меня уже закрыт, двигаюсь дальше...
Проект временно "заморожен", занимаюсь декодированием VM. А потестировать можно всем желающим, правда в нем ещё много чего не доделано, но на экзешниках работает, четыре моих больших проекта декомпилированы успешно... PS: Ограничение на полную функциональность - 30 дней.
Ошибки декомпиляции есть? Если встречаются ошибки, то 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 на объектники и всунуть их в директорию компиляции. А вот это в ближайшее время не представляется возможным.
Если гора не идет к Магомету, значит надо идти к горе..., поступи наоборот, создай виртуальный диск с путями в которых компилились объектники и положи туда свой проект. С одной стороны это просто, а с другой чревато большими ошибками, если декомпилятор может определить тип компилятора по экзешнику, то определить чем скомпилированы, а тем более на чем написаны прилинкованные модули прога пока не в силах, поэтому всё что находится не в пути проекта игнорируется. Для того, чтобы правильно декомпилировать такой модуль нужен дополнительный анализ, а его пока нет.
попробовал разобрать ради интереса одну игрушку разных версий с дебаг инфой, закончилось для декомпилера все печально во всех четырех случаях.. 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 на скринах ниже:
Да, похоже есть проблема с работой под разными осями, вылетал с исключениями, но его проект я декомпилировал у себя без единого исключения, у Dump'а аналогично - куча исключений. Я тестировал плагин на двух операционках - WinXP SP2 (двухядерник) и Win2003 сервак, исключений (вылетов из программы) не было, воообще-то обрабатываемые исключения внутри разбора функций встречаются, но инфа о них заносится только в логи, обработка текущей функции прекращается и начинается обработка следующей функции. Вопрос Dump'у: что это за куча окошек с исключениями, они сами друг за другом появляются и прога продолжает работу или после каждого стопорится и надо давить OK. Написал бы ещё чем скомпилена игрушка и полная ли дебаг инфа, если дебаг инфа не полная (об этом прога молчит, т.к. не знает) или декомпилер не находит требуемые pdb файлы (о чем сообщает), то декомпиляция такого проекта обречена на неудачу.
стопорится и приходится давить ок в бешенном темпе... потом продолжает работать, но эксепшены снова мгновенно появляются и снова приходится давить =) а скомпиленна гама.. чтото на VS 2003, чтот на VS2005 вроде, а часть инструментов в борланде, но с ними не извращался, хотя.. в pdb Microsoft C/C++ MSF 7.00, что = vs2003 вродь, дебаг инфа.. скорее всего не совсем полная, .obj файла и прочей фигни нема кроме самих pdb'шников
да, забыл спросить, прожект будет коммерческим как у злобного автора Оли? или можно надеяться на чтото типа народно-любимого OllyDbg =)
Вроде кто-то уже здесь спрашивал; надеяться конечно можно, только пока об этом не думал, ещё много чего написать нужно. Насчет исключений, у вас в Винде есть такая библиотека PSAPI.DLL? Ещё вопрос, исключения, которые выводятся на экран в логи пишутся?