2017-01-30 4 views
1

Как я могу узнать о разливе реестра, просмотрев файл objdump? Моя мысль заключается в том, что это можно сделать, отслеживая указатель стека: перемещение sp за пределы пролога и эпилога функции, указывает на разброс данных.Как я могу узнать, как разливаться через файл Objdump?

Я хочу знать, какие строки кодов занимают разлив регистров. Кроме того, где восстановленные регистры указывают на глобальную переменную, также стек?

ответ

1

Регистрация разлива не требует перемещения указателя стека, локальная переменная может разливаться в стек и постоянно использоваться непосредственно оттуда, пока все еще находится в текущем фрейме, а компилятор будет использовать только стек стека с его смещением регистра.

Ваш лучший выбор - это просто поиск адресов памяти, которые постоянно читаются и/или записываются. Это может произойти даже там, где есть доступные регистры из-за недостатков компилятора или невозможности доказать, что ни один другой поток/блок кода не получает доступ к некоторой локальной переменной addr (например, если адрес переменной скопирован где-то из области видимости). В таких случаях необходимо поддерживать эту переменную в памяти.