Я провел небольшое исследование, и кажется, что map2dbg действительно может использоваться для 64-битных исполняемых файлов, созданных в Delphi XE2.Единственное, что вам нужно, это изменить WORD в сгенерированном файле DBG со смещением 4 с $ 8664 до $ 014 C.
Да, это похоже на бессмыслицу, потому что это означает изменение поля Machine в заголовке DBG с AMD64 на X86., но это действительно приводит к корректной загрузке файла DBG как в WinDbg, так и в Process Explorer.
Я сделал исправленную версию map2dbg версии 1.3, поэтому он автоматически записывает $ 14c в DBG.Вот архив: http://yadi.sk/d/kbVFCGyI2gQzM
ОБНОВЛЕНИЕ: файлы DBG, созданные с исправленной версией map2dbg, принимаются как Process Explorer, так и WinDbg, а символы из этих DBG правильно связаны с соответствующими адресами в исполняемом файле., но отображаются неправильные кадры стека.
Причина в библиотеке DBGHELP.Как видно из его разборки, он загружает только файлы DBG, созданные для процессоров X86 или Alpha (значения машинного поля $ 14c и $ 184).Но если мы вручную изменим поле Machine в файле DBG с AMD64 на X86, то DBGHELP будет рассматривать исполняемый файл как 32-разрядный модуль (поэтому сегмент PDATA из исполняемого файла не будет использоваться при разматывании стека), и неверный стеккадры будут отображаться отладчиками.
Я исправил обе версии DBGHELP для x86 и x64, установленные с WinSDK для Win8.Исправленные версии позволяют загружать файлы DBG с полем AMD64 Machine ($ 8664), поэтому стеки кадров отображаются в соответствии с ожиданиями.Эти версии доступны в этом архиве: http://yadi.sk/d/7ZDLv2ed2gRGo
Итак, теперь у нас есть два разных подхода к использованию символов из 64-битных исполняемых файлов, скомпилированных с Delphi XE2:
Простой способ: используйте пропатченную map2dbg для создания DBG "fake-x86", которые могут быть загружены в WinDbg и Process Explorer, так что адреса символов будут показаны, но отладчики не смогут отображать кадры стека.
«Хардкорный» путь: используйте патченный dbghelp.dll, с поддержкой файлов AMD64 DBG.С этой версией DBGHELP WinDbg и Process Explorer могут разматывать кадры стека.
ONE MORE UPDATE: cv2pdb теперь может конвертировать файлы DBG, созданные с помощью map2dbg, в PDB,Поддерживаются как 32-битные, так и 64-битные исполняемые файлы.
Вот скомпилированная версия последних источников cv2pdb.