Моя мета:
- З огляду на підвішений потік 32-ти або 64-розрядної програми Windows, складеної Delphi, для проходження стека (виконання)
- Дано записи стеків для перерахування локальних змінних у кожному методі та їх значень. Тобто, принаймні, знайдіть їх адресу та тип (integer32 / 64 / підписаний / неподписаний, рядок, плаваючий, запис, клас ...), поєднання яких можна використовувати для пошуку їх значення.
Перше - це добре, і це друге питання. На високому рівні, як ви перераховуєте локальні змінні, що мають запис стека в Delphi?
На низькому рівні я це досліджував:
RTTI: не перераховує такого роду інформацію про методи. Це було не те, що я насправді коли-небудь вважав реалістичним варіантом, але перелік тут все одно.
Інформація про налагодження : завантажується інформація про налагодження, створена для складання налагодження.
- Файли з картою: навіть детальний файл карти (файл у текстовому форматі! Відкрийте один і подивіться) не містить локальної інформації про змінну. Це в основному список адрес і номерів рядків вихідних файлів. Чудово підходить для співвідношення файлів і ліній, наприклад, сині точки в жолобі; не чудово для більш детальної інформації
- Інформація про віддалену налагодження (файл RSM) - невідома інформація про її вміст чи формат.
- Файли TD32 / TDS: мій поточний напрямок досліджень. Вони містять глобальну та локальну символіку серед безлічі іншої інформації.
Проблеми, з якими я стикаюся тут:
- Немає документації щодо формату файлів TD32 (яку я можу знайти.)
- Більшість моїх знань про них походить з коду JCL Jedi, що використовує їх (JclTD32.pas), і я не впевнений, як використовувати цей код, або чи є структури там достатньо обширними, щоб показувати місцеві зміни. Я впевнений, що він буде працювати з глобальними символами, але я дуже не впевнений у місцевих. Існує велика кількість констант, визначених і без документації для формату, щоб прочитати, що вони означають, я залишаюсь здогадуватися. Однак ці константи та їхні назви мають десь походити.
- Джерело, яке я можу знайти, використовуючи інформацію про TDS , не завантажує та не обробляє локальні символи.
Якщо це правильний підхід, тоді це питання стає "Чи є документація для формату файлів TDS / TD32, і чи є зразки коду, які завантажують локальні змінні?"
Зразок коду не є важливим, але може бути дуже корисним, навіть якщо він дуже мінімальний.