Доступ к данным, сегментам BSS будет осуществляться с помощью указателя или по инструкции, обращающейся напрямую? - PullRequest
1 голос
/ 18 октября 2010

Я знаю, что когда речь идет о доступе к памяти стекового фрейма, это будет происходить с использованием указателя фрейма стека, но мне интересно, каким будет доступ к данным, сегментам BSS, содержащим глобальные / статические данные, с помощью такого указателя, какуказатель кадра стека, указывающий начальную точку этих сегментов или инструкции, адресуют части этих сегментов напрямую, так что при каждом запуске приложения система должна будет записывать адресные части инструкций в текстовый сегмент?

Ответы [ 2 ]

1 голос
/ 18 октября 2010

Вы можете объявить глобальную переменную с помощью __attribute__ ((section ("BSS"))) и получить адрес переменной. Посмотрите документацию Gcc

Вы также можете объявить неинициализированную статическую переменную и получить ее адрес.

1 голос
/ 18 октября 2010

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

(Обратите внимание, что это не так для ASLR).

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