Program understanding is one of the most time-consuming processes in software maintenance. This is partially due to the human inability to memorize complex interrelations among the software entities of a large software system. The situation worsens when the programs are not written by the software maintainers and little documentation is available. The basic idea in information abstraction is to extract relational information among the software entities of programs, store the information in a database, and make it available to users in a form that can be easily understood. We have implemented an information Abstractor to extract relational information from C programs and store the information into a program database. High level access utilities are provided so that program maintainers or developers can easily retrieve the information they need for understanding the software. Besides program understanding, we found that the availability of the program database can also promote the research in four software engineering areas: multiple software views, software reusability, software metrics, and software restructuring.