Моя цель:
- Учитывая приостановленный поток в Delphi-скомпилированной 32-разрядной или 64-разрядной программе Windows, чтобы выполнить стек (выполнимый)
- Указанные записи стека, чтобы перечислять локальные переменные в каждом методе и их значения. То есть, по крайней мере, найдите их адрес и тип (integer32/64/signed/unsigned, string, float, record, class...), комбинация которых может быть использована для поиска их значения.
Первое прекрасно, а второе - это вопрос. На высоком уровне как вы перечисляете локальные переменные, учитывая запись стека в Delphi?
На низком уровне это то, что я изучал:
RTTI: не перечисляет такую информацию о методах. Это было не то, что я когда-либо считал реалистичным вариантом, но перечисление здесь в любом случае.
Отладочная информация: Загрузка отладочной информации, созданной для сборки отладки.
- Файлы карт: даже подробный файл карты (текстовый файл! Открыть и посмотреть) не содержит информации о локальной переменной. Это в основном список адресов и номеров строк исходного файла. Отлично подходит для корреляции адресов и файлов, например. синие точки в желобе; не подходит для более подробной информации
- Информация о дистанционной отладочной информации (RSM файл) - неизвестная информация о ее содержании или формате.
- Файлы TD32/TDS: моя текущая серия исследований. Они содержат глобальные и локальные символы среди множества других сведений.
Проблемы, с которыми я сталкиваюсь, следующие:
- Нет документации файла формата TD32 (который я могу найти.)
- Большинство моих знаний о них происходит из JED-кода Jedi, используя их (JclTD32.pas), и я не уверен, как использовать этот код, или структуры там достаточно обширны, чтобы показать локальные вары. Я вполне уверен, что он будет обрабатывать глобальные символы, но я не уверен в локальных. Существует множество разнообразных констант и без документации для формата, чтобы понять, что они означают, я угадал. Однако эти константы и их имена должны откуда-то появляться.
- Источник, который я могу найти с помощью информации TDS, не загружает и не обрабатывает локальные символы.
Если это правильный подход, тогда возникает вопрос: "Имеется ли документация для формата файла TDS/TD32 и есть ли какие-либо образцы кода, которые загружают локальные переменные?"
Пример кода не является существенным, но может быть очень полезным, даже если он очень минимален.