Yep, it has the telltale MZ header at the top. Either a DOS or windows executable. [1]
The pdf appears to be a readable formatted version, to get the actual executable you’ll need the raw text sans newlines (as described in the paper)
The pdf appears to be a readable formatted version, to get the actual executable you’ll need the raw text sans newlines (as described in the paper)
There are exceptions, like REGEDIT.EXE of Windows 95.
/* this next collection of data are mostly just characters. It appears
to be constant within the headers put on NT exes */
filehdr_in->pe.dos_message[0] = 0x0eba1f0e;
filehdr_in->pe.dos_message[1] = 0xcd09b400;
filehdr_in->pe.dos_message[2] = 0x4c01b821;
/* ... snip ... */
filehdr_in->pe.dos_message[13] = 0x0a0d0d2e;
filehdr_in->pe.dos_message[14] = 0x24;
filehdr_in->pe.dos_message[15] = 0x0;
filehdr_in->pe.nt_signature = NT_SIGNATURE;
(Of course, this code dates back to 1996 or earlier so the existence of DOS stubs might not have been a common knowledge if you didn't do any Windows programming.)On the other hand, lld uses a functionally same but slightly different stub file [1] because it prints no newlines.
[1] https://github.com/llvm/llvm-project/blob/d7642b2/lld/COFF/W...