· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ZEN —› RTTI и asm

Посл.отвђт Сообщен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