Understanding the ABI is helped by understanding how compilation works and how information about the program's variables and functions (called, more generally, "symbols") is passed between the stages of the compiler. GCC options to examine these stages, in a nutshell: http://www.ouah.org/RevEng/x24.htm Do the steps in Parts 1 and 2 of this article: http://www.linuxjournal.com/content/examining-compilation-process-part-1 http://www.linuxjournal.com/content/examining-compilation-process-part-2 http://www.linuxjournal.com/content/examining-compilation-process-part-3 I recommend reading sections of "Introduction to Reverse Engineering Software in Linux" http://www.ouah.org/RevEng/t1.htm about tools you haven't yet encountered in your programming experience. The "Understanding Assembly" chapter is also very useful if you haven't done assembly before -- but nothing can replace playing with the compiler ('gcc -S', 'objdump -d', etc.) on your own.