В целом это невозможно, конечно, есть исключения, я мог бы создать их так, чтобы другие тоже могли, но это не интересная программа.
Обычно ваша C-программа, ваша точка входа main () - это только процент кода.Есть загрузчик, который содержит фактическую точку входа для операционной системы для запуска вашей программы, это делает некоторые вещи, которые подготавливают пространство вашей виртуальной памяти, чтобы ваша программа могла работать.Нули .bss и другие подобные вещи.это часто и (или) должно быть написано на ассемблере (в противном случае вы столкнетесь с проблемой курицы и яйца), но не на языке ассемблера, который вы увидите, пока не найдете источники библиотеки C, вы часто получаете объект как частьнабор инструментов вместе с другими библиотеками компилятора и т. д.
Затем, если вы делаете какие-либо вызовы C или создаете код, который приводит к вызову библиотеки компилятора (выполнить деление на платформе, которая не поддерживает деление, выполнить с плавающей запятой наПлатформа, которая не имеет плавающей запятой и т. д.), это еще один объект, пришедший из некоторого другого C или сборки, который является частью исходных кодов библиотеки или компилятора и который вы не увидите во время компиляции / сборки / ссылки (цепочка в цепочке инструментов)process.
Таким образом, за исключением специально созданных тривиальных программ или специально созданных для этой цели инструментов (для определенных, вероятно, платформ с использованием неизолированного металла), вы не увидите, что вся ваша программа превратится в один большой исходный файл сборки, пока она не будет собрана.связанный.
Если не baremetal, то, конечно, есть уровень операционной системы, который вы наверняка не увидите как часть вашего исходного кода, в конечном счете, вызовы библиотеки C, которым нужна система, найдут место, где ониСделайте это, все скомпилировано в объект / lib перед их использованием, а исходные коды сборки для операционной системы являются частью какого-то другого процесса создания исходного кода и сборки где-то еще.