Несколько вопросов по RTTI
От: Melamed Россия  
Дата: 17.06.08 12:21
Оценка:
Несколько вопросов по RTTI:
1. Можно ли программным спосособ узнать, была ли включена RTTI информация при создании динамической библиотеки, написанной на С++ илши нет?

2. Как определить при компиляции проекта, включена ли обция сохранения RTTI информации в готовый проект?

3. Можно ли с помощью оператора typeid узнать от каких классов был унаследован класс, экземляр которого изучается? Если можно, то как это реализовать?

Среда программирования MSV 6 C++
Re: Несколько вопросов по RTTI
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 17.06.08 12:24
Оценка:
Здравствуйте, Melamed, Вы писали:

M>2. Как определить при компиляции проекта, включена ли обция сохранения RTTI информации в готовый проект?


Проверить, определен ли макрос _CPPRTTI.
- Искренне ваш, Поросенок Пафнутий
Re: Несколько вопросов по RTTI
От: gear nuke  
Дата: 19.06.08 17:20
Оценка:
Здравствуйте, Melamed, Вы писали:

M>1. Можно ли программным спосособ узнать, была ли включена RTTI информация при создании динамической библиотеки, написанной на С++ илши нет?


Компилятор помещает type_info
Автор: gear nuke
Дата: 26.05.08
в исполняемый образ (по умолчанию, в R\O секцию данных). Эта структура содержит замангленое имя вида '.?AVtype_info@@'. Можно попробовать просканировать dll.

M>3. Можно ли с помощью оператора typeid узнать от каких классов был унаследован класс, экземляр которого изучается?


Объект type_info не содержит нужной информации.
Можно получить пошаманив с разыменовыванием this

MSVC compiler puts a pointer to the structure called "Complete Object Locator" just before the vftable. The structure is called so because it allows compiler to find the location of the complete object from a specific vftable pointer

см. Reversing Microsoft Visual C++ Part II: Classes, Methods and RTTI
type_info — предпоследний член RTTICompleteObjectLocator, а нужен RTTIClassHierarchyDescriptor. Как с этим работать, должно быть видно в реализации dynamic_cast<> — __RTDynamicCast, в сорцах CRT ее нет, разве что в гугле поискать или поковырять rtti.obj (функции FindSITargetTypeInstance & Co).
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.