MEng Project Report Finding What C++ Lost: Tracking Referent Objects with GCC Alexander Lamaison Department of Computing Imperial College London <
[email protected]> Supervisor: Paul H. J. Kelly <
[email protected]> 16th June 2007 ii Abstract Pointer arithmetic in C and C++, though powerful, is inherently dangerous and a constant source of program flaws. Technologies exist to reduce these risks, one of which is Mudflap: an extension to GCC 4 that performs runtime bounds-checking. This has an number of weak- nesses, notably its inability to detect the case of pointers that stray between objects allocated adjacently. We have created MIRO, an improved version which uses the stricter approach of referent object tracking. As well as increasing the effectiveness of the checking, this allows us to provide more useful debugging information when violations occur. It requires no changes to existing C and C++ programs including non-compliant, but common, calculations involving invalid pointer values. Code compiled with MIRO can be mixed freely with unchecked code combining safety with performance and reducing the threshold to adoption. Acknowledgements I would like to thank, firstly, my supervisor and mentor Paul Kelly for guiding me through this project as well as the last four years of study and for always listening to my ramblings without complaint. Steven Lovegrove, my friend, in particular for helping me track down the source of the C++ STL problem but for help with many other problems too. Also John Wilander, Mariam Kamkar, Michael Zhivich, Tim Leek and Richard Lippmann for kindly donating the source code to their testbeds that were so invaluable throughout this project.