Я пытаюсь понять, как именно код сборки выкладывается в пространство памяти. Я написал простой ассемблерный код, содержащий несколько строк инструкции и раздел .data. Когда я осмотрел его с помощью GDB, я увидел больше данных за пределами раздела данных, которые я не мог видеть с помощью команды objdump -section-header. Ниже выведено из gdb.Что такое материал за пределами раздела .data в сборке?
(gdb) x/100x &data
0x804909c <data>: 0x03020100 0x07060504 0x0b0a0908 0x050e0d0c
0x80490ac <other>: 0x00000000 0x6d79732e 0x00626174 0x7274732e
0x80490bc: 0x00626174 0x7368732e 0x61747274 0x742e0062
0x80490cc: 0x00747865 0x7461642e 0x00000061 0x00000000
0x80490dc: 0x00000000 0x00000000 0x00000000 0x00000000
0x80490ec: 0x00000000 0x00000000 0x00000000 0x00000000
0x80490fc: 0x00000000 0x0000001b 0x00000001 0x00000006
0x804910c: 0x08048074 0x00000074 0x00000027 0x00000000
0x804911c: 0x00000000 0x00000004 0x00000000 0x00000021
Конец секции .data является 0x80490af, но как вы можете видеть, что есть больше питания за пределы секции .data, которые я не имею ни малейшего понятия вообще. Что это такое? Это просто хлам или что-то еще? Что произойдет, если я попытаюсь получить доступ к памяти за пределами раздела .data?
Что относительно файла карты компоновщика? Он расскажет вам, что находится в разделе .data, например. переменные от кода запуска или около того. –
Могу ли я проверить это с помощью objdump или аналогичных инструментов? – REALFREE
Возможно, но вам нужно отладочную информацию. Вы должны знать имя переменных, которые находятся в сегменте данных, чтобы знать, что они собой представляют. –