|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Мар 27, 2004 00:34:27 Меня бы интересовало что-нибудь по этой тематике. Просто на почитать. Как это получается у typeid и т.п. Дизасм, конечно, это хорошо и я этим и занимаюсь, но любопытно и почитать что-нибудь по теме... |
|
|
Дата: Мар 27, 2004 00:51:49 Да, и еще. Формат VTBL в MSVC++ я бы тоже не отказался узнать :) |
|
|
Дата: Мар 29, 2004 07:21:13 Если говорить про объекты, то можно просто зарезервировать адрес для строки имени класса внутри данных объекта: TClass1 struc vtblOfs dd ? pstrRTTI dd ? ; more vars here... TClass1 ends .DATA pstrClass1 db 'TClass1',0 pstrClass2 db 'TClass2',0 pstrClass3 db 'TClass3',0 .CODE TClass1_constructor proc mov [ebx].vtblOfs, offset [TClass1_vtbl_instance] mov [ebx].pstrRTTI, offset [pstrClass1] ; more object construction ... ret TClass1_constructor endp т.е. каждый объект в своём конструкторе выставляет имя типа вместе с адресом таблицы виртуальных методов. Кстати, неплохая идея добавить это в AsmDev32 - в генераторы ООП кода. |
|
|
Дата: Мар 29, 2004 18:04:48 volodya Формат VTBL в MSVC++ я бы тоже не отказался узнать :) А что если откомпилировать болванку, а потом рассмотреть через увеличительное стекло ? Я не фанатею по мелкомягкой мебели, но ты же сам знаешь, что межпроцедурный анализ потоков данных агрессивными оптимизаторами может привести к тому, что искомый формат может и не существовать... |
|
|
Дата: Мар 29, 2004 19:00:27 captain cobalt А что если откомпилировать болванку Да я так и делал. Поглядел на typeid, поглядел на dynamic_cast. Потом подумал, а хорошо бы об этом где-нибудь что-нибудь почитать в виде выжимки. В принципе, это не rocket sciense и все достаточно понятно - все базируется на vtbl. typeid().name() дополнительно использует недокументированную функцию, выполняющую демангл имени (то же самое и в undname.exe). Замангленое имя компилятор сам вставляет в RTTI-дескриптор. Словом, в принципе, все понятно, но почитать какой-нибудь обзор на тему я бы не отказался. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.074 |