Что мне делать с DW_OP_call_frame_cfa

Я пытаюсь вычислить расположение локальных переменных внутри работающей программы, используя libdwarf. Я имел обыкновение делать это, выполняя DW_OP_fbreg, который в конечном итоге отображался бы в регистр, который был бы основой для этой функции. В более новом стандарте карликов основание кадра — DW_OP_call_frame_cfa. Я не могу найти какую-либо информацию, которая говорит мне, как выполнить DW_OP_call_frame_cfa и вернуться с базовым местоположением кадра. Есть много ссылок на таблицу CFA и кто восстанавливает какие регистры, но я не знаю, как получить эту информацию и как ее применить. Может кто-то заполнить пробелы?

1

Решение

DW_OP_call_frame_cfa означает, что вы должны использовать информацию о кадре вызова для вычисления CFA; затем вставьте это в стек выражений.

См. Раздел 6.4 («Информация о кадре вызова») стандарта DWARF 4 для объяснения этого. По сути, теперь вы должны прочитать .debug_frame раздел и декодировать его в соответствии с правилами, описанными в 6.4. Это равносильно написанию другого интерпретатора для другого маленького языка байт-кода; и, возможно, повторно использовать интерпретатор выражений DWARF.

Этот код операции в основном является оптимизацией пространства в DWARF. Компиляторы уже передают информацию о кадре вызова, и этот код операции позволяет им повторно использовать ее для вычисления переменных местоположений.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]