You know, the mainframe guys have “disassembler” programs, that can read a “load module” (probably an archaic term now) and regurgitate back up an assembly code listing - which can in turn, in the right situation, be very useful to people who happen to be very knowledgeable about how certain compilers work. Like, the guys who wrote the compiler.
The implemenation language(s) will determine how much symbolic information may be available in the executable. If its a "debug" version (often the release version for rapidly changing systems which do not need to be race horses), the elf/dwarf embedded info can be used to decorate a disassembly making it quite intelligible.
(I have written elf/dwarf translators for embedded satcom software written in C++).
If the source code is java/C#, then there should be considerable symbolic information embedded to support introspection.