In essence they are *nix executable file formats. The usual descriptions of them are short, pungent and available here:
http://sourceware.org/ml/binutils/2004-05/msg00080.html
Not very informative, are they?
From this page we learn that Microsoft Object files are COFF files:
http://weichong78.blogspot.com/2008/06/windows-coff-obj-and-linux-elf.html
So we go to the Wikipedia which tells us the following:
http://en.wikipedia.org/wiki/COFF
And when I think about it that is enough:
Originally UNIX as an ur-file system used a.out as the format for its executables. This did not support symbolic debugging or shared libraries so COFF was introduced, and when a couple of UNIX geeks were hired to rewrite MS-DOS from top to bottom for 2.0 it was introduced with other UNIX innovations into that. It still had problems so ELF, originally a US Government standard, was introduced with System V and brought into Linux.
As for PE COFF :
http://gcc.gnu.org/ml/gcc-help/2000-09/msg00064.html
Which tells us that PE stands for Parallell Environment.