2013-07-29 1 views
1

Когда я компилирую C++ двоичного с помощью GCC с возможностью хранить информацию о символах и при запуске следующей команды он перечисляет TypeInfo для классовИспользует ли полоса для удаления данных RTTI в двоичном формате?

objdump -Ct ExecName | grep typeinfo 

Когда я компилирую с зачищенной опцией -s и выполнить следующую команду в нем нет символов.

Но я беспокоюсь, что информация RTTI хранится в каком-то другом месте.

Я бы предпочел, чтобы все имена классов не отображались в двоичном формате. Я хотел бы подтвердить, действительно ли десорбирующие символы заканчивают удаление информации RTTI.

В этой презентации на Blackhat они показывают, как использовать RTTI, чтобы узнать о двоичном коде. http://www.blackhat.com/presentations/bh-dc-07/Sabanal_Yason/Paper/bh-dc-07-Sabanal_Yason-WP.pdf

Я знаю, что вы можете отключить RTTI, используя -fno-rtti при компиляции, но я хочу, чтобы это было последним.

+1

nope (padding padding padding) – sehe

+0

Вы можете проверить с помощью утилиты командной строки 'strings', будет ли ваш двоичный код содержать ваши имена классов в текстовом формате ... – arne

+0

@ pt123 Документ, на который вы ссылаетесь, рассказывает о MSVC. g ++ может свободно применять RTTI по-разному. Описание MSVC включает имена классов, метод g ++ может и не быть. Вам нужно узнать, как g ++ делает RTTI. –

ответ

2

Но я обеспокоен тем, что информация RTTI хранится в другом месте .

Это.

Когда я попросить компилятор выполнять dynamic_cast, то он должен соблюдать договор dynamic_cast, и это требует RTTI. Единственный способ избежать этого - установить параметр компилятора, который даст ошибку или UB, когда вы попытаетесь использовать dynamic_cast таким образом. Компилятор: обязывает предоставить RTTI языком, если вы явно не указали это иначе.

+0

в соответствии с этим комментарием в другом потоке, который может использовать a has ==> «на самом деле это не требует хранения имени, а только идентификатора. Например, хеш будет работать» http://stackoverflow.com/a/4948454/1527440 – pt123

+0

@ pt123: The Itanium ABI запрещает это, я уверен. – Puppy