2014-12-12 2 views
1

Я не могу понять, что хранится в текстовом сегменте. То, что я нашел до сих пор, говорит о том, что в нем содержится исполняемый код (в 0 и 1) моей программы. Но не вся память программы содержит исполняемый код (т. Е. Записывается в 0s и 1s)? Я имею в виду, что программа сначала скомпилирована, затем собрана и, наконец, связана, и, таким образом, как только мы ее запустим, все это в двоичном формате. Итак, как только программа запускается, кадры стека производятся в стеке для текущих исполняемых функций, и в этих кадрах стека все переменные находятся в 0 и 1, но что внутри текстового сегмента?Что касается текстового сегмента в памяти программы?

+0

Ну, часть «0 и 1» уже не соответствует действительности. Некоторые из моих программ содержат 2s, 3s и т. Д. - вплоть до 255. – usr2564301

+0

clcto, который не отвечает на мой вопрос – Root149

+0

Подождите, содержит ли эта область все прототипы функций? – Root149

ответ

1

(несколько странно названный) text раздел (сегмент) обычно содержит скомпилированный двоичный код, как вы подозреваете.

Исполняемый файл часто содержит другие типы данных помимо кода, такие как инициализированные значения переменных, ресурсы, информацию об отладке, данные перемещения и т. Д., Которые помещаются в разделы с другими именами.

+0

Итак, в текстовом сегменте содержатся фактические определения функций, записанные в двоичном формате? – Root149

+0

@ Root149: Да, текстовый сегмент содержит скомпилированные тела функций, составляющих программу. Он также может содержать другие материалы: если вы не использовали общие библиотеки, то он также может содержать код из библиотечных функций; он может также содержать данные только для чтения, такие как строковые литералы, поскольку текстовый сегмент делается только для чтения (без самомодифицирующего кода). –

1

В сегменте «.text» компилятор помещает '1' и '0', сгенерированные из инструкций программы и кодирующие эти инструкции, и он обычно доступен только для чтения и является исполняемым. В отличие от сегмента данных, который содержит те и нули, кодирующие ваши значения переменных, и он обычно RW и не является исполняемым. Стек обычно находится в сегменте данных, потому что вы не нажимаете туда никаких инструкций, а только данные. В физической памяти текстовый сегмент и сегмент данных (и некоторые другие разделы) могут находиться в совершенно разных местах, которые обычно не являются смежными. Несмотря на то, что они смежны в вашем двоичном формате. Это означает, что ваш «текстовый» сегмент может находиться в адресе 0x100, но данные в 0x1000000. Но это не означает, что ваш исполняемый файл будет иметь размер 0x1000000.

+0

Итак, в текстовом сегменте содержатся фактические определения функций, записанные в двоичном формате? – Root149

Смежные вопросы