Хорошо, с чего мне начать ... Да, и .data
, и .bss
находятся в этой области памяти. Проблема в том, что невозможно определить, в каком порядке они расположены.
Мы можем предположить, что используется порядок по умолчанию, и сделать обоснованное предположение, но мне это не нравится.
В длинной ветке комментариев под вопросом вы упомянули кое-что интересное, чего не было в вашем вопросе.
исполняемый файл не связан динамически, как говорит команда файла: 32-разрядный исполняемый файл LSB ELF, Intel 80386, версия 1 (SYSV), статически связан, в данном случае удален, нет сценария компоновщика, не так ли? - Маска
В этом случае библиотека содержит таблицу символов со всеми смещениями символов. Эта таблица включает информацию о разделе. Он будет обработан компоновщиком при компиляции приложения. На этом этапе именно ваш скрипт компоновщика управляет порядком, в котором выводятся разделы .data
и .bss
.
Если это сценарий компоновщика по умолчанию, найдите его. Если он индивидуальный, у вас должен быть к нему доступ и вы можете его читать. Если не уверены, уточните здесь, и мы постараемся помочь :)
Я сам задал вопрос не имеет отношения, но предлагает пример кода сценария компоновщика и некоторого кода C. В этом скрипте компоновщика сегмент .bss
идет после сегмента .data
.
person
nonsensickle
schedule
09.04.2014
.bss
, это поведение большинства компиляторов. В этом случае, если мы предполагаем, что это и для этого компилятора, я прав насчет адреса? - person The Mask   schedule 09.04.2014.bss
, тогда.bss
будет в0x08048054
, а.data
будет в0x08048054+0x0000e
. Да, это справедливое предположение. - person nonsensickle   schedule 09.04.2014ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, stripped
в этом случае нет сценария компоновщика, не так ли? - person The Mask   schedule 09.04.2014.bss
и.data
. - person nonsensickle   schedule 09.04.2014a
иb
на 32-битной машине, гдеsizeof(int) = 4
,a
находится в0x08048054+0x0000e
иb
в0x08048054+0x0000e+0x4
правильно, или мне следует рассмотреть что-то еще? - person The Mask   schedule 09.04.2014.bss
. Если это то место, где мы договорились, что.bss
сегмент находится, то мы можем предположить, чтоa
иb
оба находятся в этом блоке памяти. Я уже отвечал на подобные вопросы в прошлом и постараюсь дать вам некоторые ссылки, которые у меня были в них. - person nonsensickle   schedule 09.04.2014PT_LOAD
сегмент, который является нашими.data + .bss
секциями вместе, запрашиваются размеры p_filesiz и p_memsiz, и ядро должно выделить (выделить соответствующее слово?)p_memsiz
байта и обнулить разницу междуp_memsiz
иp_filesiz
, - person The Mask   schedule 09.04.2014N = p_memsiz - p_filesiz
иN
- это.bss
область памяти, теперь заполненная нулями. В этом случае, где же адрес этого блока, вновь выделенного ядром? т.е. при запуске этой области блочной памяти (в нашем случае здесь, в0x08048054
) ядро модифицирует p_paddr и помещает туда адрес? Надеюсь, понятно. - person The Mask   schedule 09.04.2014p_vaddr
в предыдущем комментарии) - person The Mask   schedule 10.04.2014