+3  A: 

Last time this happened to me I used doxygen to get a quick overview.
It will generate useful helppages for every function/constant/variable even if the source didn't use the proposed syntax for comments. Especially the pictures are useful.

There is a doxygen tag on SO where you find more useful informations.

tanascius
I've found that doxygen can save you a lot of leg-work. The drudgery of determining "Where function X is implemented" and "What is the definition of struct Y" becomes a matter of clicking on hyperlinks.
torak
Woa nice, I just ran it against the code. Not only did it work in a splits second, it looks really nice too.
shogun
+1  A: 

You have to look for the int main() function. If there isn't one, it's more difficult : you have to look for code outside of any function.

If you're running an UNIX-like system, you may use grep.

The main function in this source is located in acct.c. ;)

Pikrass
A: 

Ideally there would be some overview documentation, which explains the decomposition of the application. Without that it's going to be tough, and very dependent upon how well that app is structured.

I hope that you are using some good code browsing tool that lets you move between sources easily.

In the absence of good docs you might start by identifying some components. Server side apps will probably have some kind of event/command entry point, where actions enter the system and these will dispatch off to various chunks of code. There's likely to be some kind of state engine where the effect of actions is updated. See whether you can identify such pieces. Don't worry about what they do, just their entry points. There may well be some header files that explicitly identify interfaces to some modules.

As you identify pieces perhaps draw a diagram of what you find (UML might help).

djna