The C++ Standard ISO/IEC 14882-2003 One Definition Rule (ODR) (Section 3.2) states that
...
Wiki Markup |
---|
Although it is possible to check that the ODR is complied with (see \[[Quinlan 06|AA. References#QuinlanBibliography#Quinlan 06]\]), as of October 2006 we are not aware of any compilers that fully enforce the rule or even issue a diagnostic. The EDG [C++ Front End|https://www.edg.com/index.php?location=c_frontend] diagnoses a subset of violations of the ODR when compiling in export mode (a mode where the C++ {{export}} feature is enabled). As the paper by Quinlan et al. shows, failing to enforce the ODR enables a virtual function pointer attack, known as the VPTR [exploit|BB. Definitions#exploit]. This is where an object's virtual function table is corrupted so that calling a virtual function on the object results in malicious code being executed. See the paper by Quinlan et al. for more details. |
...
Wiki Markup |
---|
\[[ISO/IEC 14882-2003|AA. References#ISOBibliography#ISO/IEC 14882-2003]\] Section 3.2, "One definition rule" |
Wiki Markup |
---|
\[[Quinlan 06|AA. References#QuinlanBibliography#Quinlan 06]\] |
...
MSC32-CPP. Ensure your random number generator is properly seeded 49. Miscellaneous (MSC) 99. The Void (VOID)