Вопрос, связанный с перемещением .rodata - PullRequest
3 голосов
/ 17 августа 2011

Я пытаюсь написать программу на C для машины без виртуальной памяти (или, если быть более точным, ОС), и у меня возникают некоторые трудности с разделом .rodata, или, точнее, с тем, что там происходит.,Проблема заключается в том, что, хотя разделы располагаются по четко определенным адресам во время компоновки, когда программа переходит в исполнение, она перемещается.

Например: допустим, что моя программа запускается, она начинается с 0x1000, когдаон выполняется, то, что должно быть в 0x1000, перемещается в 0xff1000.

Как говорится, моя проблема в том, что материал, который обычно входит в .rodata, "жестко закодирован" компилятором (gcc), и яОни теряют указанные константы .rodata в памяти из-за перемещения и gcc жестко кодируют их адреса, так что они получают абсолютное смещение вместо относительного.

Есть ли способ, которым я могу получить константы .rodata иметь относительное смещение вместо абсолютного.А под относительным я подразумеваю относительно каких-либо активных регистров процессов?

1 Ответ

1 голос
/ 24 января 2013

В зависимости от архитектуры, возможно, что .rodata произвольно перемещается в определенную область памяти (например, в ПЗУ).Такую информацию можно найти в техническом описании вашего компьютера.Если вы в этом случае, вы должны указать ссылку, чтобы поместить раздел .rodata в нужную область, используя скрипт компоновщика.Хороший обзор того, как работают скрипты компоновщика GCC, можно найти здесь:

http://www.scoberlin.de/content/media/http/informatik/gcc_docs/ld_3.html

Более того, вы можете легко найти множество специфичных для архитектуры скриптов ссылок в Интернете.

Надеюсь, это помогло!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...