в основном я хочу сделать сопоставление вызывающего абонента, добавив проверки во время выполнения
который проверяет допустимые диапазоны перед каждым возвратом C / C ++
казнены.
У меня есть прямое отображение всех отправлений виртуальных объектов на
допустимые записи виртуальной таблицы для данной иерархии классов.
Эти данные собираются во время LLVM LTO. Теперь я хочу сделать то же самое для
вся виртуальная функция возвращается. Поскольку прямое отображение говорит
мне какие функции должны быть доступны мне нужно определить по порядку
точно отобразить следующую информацию.
Откуда в Clang / LLVM получить адреса возврата для каждого
Возврат содержится в виртуальной функции. Возможно ли быть полученным
эта информация во время компиляции?
Как определить, в какой функции содержится определенный возврат.
Далее, как определить, к какому классу принадлежит эта функция?
Заранее спасибо,
Павел
да, EJP, вы правы в том, что адреса возврата помещаются в стек во время выполнения, но каждый возврат должен возвращаться по адресу рядом с инструкцией вызова, которая использовалась для вызова соответствующей функции, поэтому я подумал, что, поскольку каждый возврат должен продолжаться выполнение после инструкции вызова там (после инструкции вызова) должно быть адресом, который можно получить во время компиляции.
Если вышеупомянутое не выполняется, то как насчет инструкции компилятора о том, что он генерирует необходимую информацию после каждой инструкции вызова?
Ждем квалифицированного точного ответа на мой пост. 🙂
Других решений пока нет …