Сопоставить все возвраты виртуальных функций с соответствующими адресами возврата

в основном я хочу сделать сопоставление вызывающего абонента, добавив проверки во время выполнения
который проверяет допустимые диапазоны перед каждым возвратом C / C ++
казнены.

У меня есть прямое отображение всех отправлений виртуальных объектов на
допустимые записи виртуальной таблицы для данной иерархии классов.
Эти данные собираются во время LLVM LTO. Теперь я хочу сделать то же самое для
вся виртуальная функция возвращается. Поскольку прямое отображение говорит
мне какие функции должны быть доступны мне нужно определить по порядку
точно отобразить следующую информацию.

  1. Откуда в Clang / LLVM получить адреса возврата для каждого
    Возврат содержится в виртуальной функции. Возможно ли быть полученным
    эта информация во время компиляции?

  2. Как определить, в какой функции содержится определенный возврат.
    Далее, как определить, к какому классу принадлежит эта функция?

Заранее спасибо,
Павел

-1

Решение

да, EJP, вы правы в том, что адреса возврата помещаются в стек во время выполнения, но каждый возврат должен возвращаться по адресу рядом с инструкцией вызова, которая использовалась для вызова соответствующей функции, поэтому я подумал, что, поскольку каждый возврат должен продолжаться выполнение после инструкции вызова там (после инструкции вызова) должно быть адресом, который можно получить во время компиляции.

Если вышеупомянутое не выполняется, то как насчет инструкции компилятора о том, что он генерирует необходимую информацию после каждой инструкции вызова?

Ждем квалифицированного точного ответа на мой пост. 🙂

0

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

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

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