Зачем нужны секции

Тема в разделе "WASM.WIN32", создана пользователем okante, 6 авг 2006.

  1. okante

    okante New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    13
    Когда я изучал внутреннее устройство исполняемых файлов у меня возник один вопрос. Зачем в них вводится деление на секции? Ведь данные по сути загружаются в одну и ту же область памяти.
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    У данных, кода, стека и других специальных типов секций разное назначение. Понятие секции позволяет назначить им разные атрибуты.
     
  3. drmist

    drmist New Member

    Публикаций:
    0
    Регистрация:
    31 май 2005
    Сообщения:
    112
    okante
    В основном для того, чтобы они имели разные права доступа.
    Чисто на всякий случай - чтобы данные в секции .data случайно не обработались как исполняемый код, или чтобы случайно не модифицировать секции .rdata или секцию импорта. Лично я в своих программах объединяю все секции в одну, благодаря чему exe-шник становится на пару килобайт легче.
    К сожалению нельзя изменить права доступа к стеку, что приводит к возможности существования ошибок типа переполнения буфера.
     
  4. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    drmist
    Почему нельзя?

    Это притянутая за уши отмазка :) Как и заполнение дыр между сегментами в секции с помощью 0xCC.

    Вообще, сам Вон Ньюман велел хранить данные и код отдельно друг от друга. Потроны доступа к данным и коду обычно различаются. Поэтому, раздельное хранение данных и кода позволяет более эффективно использовать кеш, IMHO. К стеку это тоже имеет непостредственное отношение.
     
  5. BioMehanik

    BioMehanik New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2006
    Сообщения:
    101
    Ну и не забываем про отладку... ))
     
  6. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Я понял проще все это, но как известно, каждый понимает по разному!
    Как понял я:
    Человек привык разграничивать все, к примеру - Начальник\подчиненный, Черное\белое В программировании тоже он пришел к разграничению множетсва понятий. Потому что разделяя сложную задачу на ряд простых, то поняв одну за другой простые задачи легче понять сложную, чем не разбив ее.
    Казалось бы, а что на нам мешает держать все в одной секции как в .com файле? Но тут есть различия и нюансы:

    1. Как обезопасить программы друг от друга?
    2. Как понять что это ? Код или данные?

    1. А почему они друг друга боятся? Да потому что либо программист может написать не верный код или другой программист побьет его программу (к примеру неверно работающий конвертер из wav 2 mp3 или вирус). Следовательно надо разделить прогрммы разных программистов друг от друга!
    Но причем здесь секции? Да тут такое же мышление, чтобы код не выполнялся в секции данных! Он не там лежит! В результате не верного программирования, когда программист точно знает что это код, а не данные ему проще отлаживать программу, а представь что в результате ошибочных действий процессор понял, что это не данные, а код?

    2
    Когда происходит компиляция, проще сделать в одной куче код, а вдругой данные. А затем зачем напрягаться, раз есть по разным местам, пусть и будут по разным местам и назовем их секциями кода и данных.
    Хочу сказать, что современный процессор умеет предсказывать поведение кода! От этого факта, тоже много мыслей, как хорших, так и не очень :))
     
  7. BioMehanik

    BioMehanik New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2006
    Сообщения:
    101
    EvilsInterrupt
    Губит людей не пиво, губит людей вода.
    особенно в ответах.. ))
     
  8. okante

    okante New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    13
    Quantum, drmist, EvilsInterrupt --- Спасибо.
     
  9. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    И еще:


    1. Секции можно "размазать" по памяти весьма замысловатым образом
    2. Секция неинициализированных данных может иметь ОЧЕНЬ большой размер, не увеличивая EXE
    3. Секция может быть расшареной между instance'ами одного и того же EXE

    Quantum
    Фон Нойман :)
     
  10. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    CyberManiac
    Непривычно. Пожалуй, пусть будет лучше на еврейский лад ;)
     
  11. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    Ещё есть момент с адресом загрузки. Например, в одном файле могут быть небольшие куски кода/данных которые грузятся в области памяти разделённые несколькими мегабайтами адресного пространства. То есть, если попробовать решить проблему не секциями, а "образом памяти", то получится огромный файл и нолями. А кроме того, в embedded системах, в промежутке между адресами вышеупомянутых блоков, просто может ничего не быть. То есть, писать туда нельзя. След-но нужны секции.

    Ну и, как сказал Quantum, часто (например на PowerPC) ставят разные права доступа к страницам. То есть, из секции кода можно исполнять и читать, но нельзя туда писать. А из секции данных и стека нельзя исполнять. А вот const секция, доступна только для чтения.
     
  12. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Вообще-то он всегда Джон фон Нейман был, причем фон - это баронская приставка. А вот на еврейском точно не Ньюман :) http://www.rus-edu.bg/shp/edu/online/inf/bookinf/theory/chapter3/neumann.html
    Все машины в основном сегодня не фон-Неймановские - отсюда и вирусы.
     
  13. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    valterg
    Как можно "von" произносить как "фон"? На месте Ньюмана я бы обиделся на русских.
     
  14. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Quantum
    Как можно "von" произносить как "фон"?

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