People have repeatedly compared the stackguard compiler with libsafe, wondering which gives you more protection. In my opinion, stackguard's protection is much broader, for instance, it will detect any stack smashing attempt, not just those involving functions such as memcpy; moreover, using libsafe usually means you do have to modify the source code to avoid use of inline string functions, etc.
On the other hand, libsafe has two advantages: on one hand, you
can use it to provide additional protection for applications that
you don't have the source code for. Simply set the LD_PRELOAD
environment variable before invoking the program, and you will get
some additional protection (at least not be worse off than before).
$ export LD_PRELOAD=/lib/libsafe.so $ application_without_sourcecode ...
Libsafe's second advantage is that the code can probably be ported to other platforms as well, as long as it uses the GNU compiler. Stackguard is currently exclusively targeted for Linux/ix86.