раскручивание стека в dwarf2

Я не понимаю, как раскручивание стека в dwarf2 обеспечивает надежное восстановление аргументов в некоторых очень простых сценариях ABI (двоичный интерфейс приложения). Рассмотрим ABI, в котором говорится, что первые три аргумента должны находиться в регистрах и располагаться в стеке. Насколько я понимаю, механизм раскручивания стека dwarf2 гарантирует, что при правильном заполнении таблицы CFI можно получить значения регистров в точке вызова текущего кадра. Это, однако, не позволяет вам перейти к прологу вызывающей стороны и узнать, каково было содержимое регистров аргументов. Итак, я думаю, должен был быть способ найти значения регистров даже в одном и том же кадре в разных точках (таблица, закодированная в разделе .debug_frame, дает только местоположения в предыдущем кадре).

Что-то не так в моем понимании? Как в таких случаях работают отладчики, основанные на форматах отладки dwarf2? Для архитектур, в которых аргументы передаются в стеке, не будет проблем с восстановлением значений во всех точках программы (для любого кадра).


person bbv    schedule 08.03.2011    source источник


Ответы (1)


Я думаю, что мое понимание было неправильным в то время. Способ раскручивания стека в dwarf2 заключается в использовании информации о кадре вызова (CFI). Это позволит отладчику создать состояние одного из предыдущих кадров. Выражения местоположения для этого фрейма сообщат отладчику о расположении аргументов.

person bbv    schedule 07.04.2011