стек раскручивается в dwarf2 - PullRequest
1 голос
/ 08 марта 2011

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

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

1 Ответ

0 голосов
/ 07 апреля 2011

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

...