class Test{
int a;
alignas(16) int b;
int c;
};
Test t;
метод А: навязчивое настроение.
так как мы можем получить доступ к исходному коду и перекомпилировать его, мы можем использовать
многие другие, как друзья, получают доступ к приватному члену, все они являются легальным бэкдором.
метод Б: грубое настроение.
int* ptr_of_member_c = reinterpret_cast<int*>(reinterpret_cast<char*>(&t) + 20);
мы используем магическое число (20), и это не всегда правильно. Когда макет класса Test изменился, магическое число стало источником большой ошибки.
метод C: супер хакерское настроение.
Есть ли какое-нибудь ненавязчивое и не грубо настроение?
поскольку информация макета класса Test скрыта компилятором,
мы не можем получить информацию о смещении из уст компли.
ех.
offsetof(Test,c); //complie error. they said can not access private member.
мы также не можем получить указатель на член класса Test.
ех.
&Test::c ; //complie error. they said can not access private member.
@ Йоханнес Шауб - у Литб есть блог, он нашел способ ограбить личный указатель члена.
но я подумал, что это должно быть ошибкой комплимента или языковой ловушкой.
я могу завершить его на gcc4.8, но не на vc8 complier.
поэтому вывод может быть:
Хозяин строит весь черный ход.
у вора всегда есть грубый и плохой способ взломать.
случайный хакер имеет элегантный и автоматизированный способ взломать.