Breaking Information Hiding: otze hat mich herausgefordert...
-
Zweig von
http://www.c-plusplus.net/forum/viewtopic-var-t-is-251787-and-start-is-24.htmlclass base{ virtual void foo(){} virtual void bar(){} }; class test1:public base { int a; };Das ist einfach:
class test1_breaker : public base { public: int a; }; ... ((test1_breaker*)&test1_instance)->a = 23class test2 { static int a; }keine Ahnung
class test3 { class Private; Private* a; };Müsste wie 1. gehen:
class test3_breaker { public: class Private { public: /* hier dummy-implementierung von Private, so dass die Adressen passen */ } Private * a; }so, könnt ihr mir weiterhelfen? Kann man irgendwie die adresse der statischen variablen raten? Weiter komme ich nicht. (ja otze, du darfst auch
)Dass das ganze undefined behaviour ist, ist klar.
-
3. bräuchte nicht mal so kompliziert zu sein - die Private Klassendeklaration ist egal, du brauchst lediglich eine im Layout identische Klasse zu haben:
class test3 { class Private; Private* a; }; struct smells_like_test3_private; struct test3_breaker { smells_like_test3_private* a; };an den static member kommst du aber beim besten Willen nicht ran, wenn du nicht gerade das Glück hast, dass irgendjemand mit Berechtigung einen pointer auf test2::a hält - in dem Fall kannst du mit den gleichen Trickdieb-Methoden auch dort die Informationen rausklauen.