Вся эта информация кодируется в двоичном объекте согласно соответствующему двоичному интерфейсу приложения (ABI).
Текущий Linux ABI - это исполняемый и связываемый формат (ELF), и вы можете запросить заданный c двоичный файл с использованием такого инструмента, как readelf или objdump.
Текущий Windows ABI - это формат Portable Executable (PE). Я не знаком с набором инструментов здесь, но быстрый поиск в Google показывает, что есть программы, которые работают так же, как readelf:
http://www.pe-explorer.com/peexplorer-tour.htm
Вот спецификация Microsoft формата PE:
https://docs.microsoft.com/en-us/windows/win32/debug/pe-format
Однако ни один из этих форматов больше не поддерживает 16-разрядные двоичные файлы. Более старый формат ABI называется «a.out» для Linux, который можно прочитать и запросить с помощью objdump (я не уверен насчет readelf). Старые форматы Windows / DOS называются MZ и NE. Опять же, я не знаком с инструментальной поддержкой этих старых Windows форматов.
В Википедии имеется довольно полный список всех популярных форматов исполняемых файлов, которые использовались, со ссылками на дополнительную информацию:
https://en.wikipedia.org/wiki/Comparison_of_executable_file_formats