Копируется из .data-секции бинарника в оперативку, как и другие (проинициализированные не нулями) глобальные переменные. Сам код функции в .text-секции и не обязан копироваться в озу (на микроконтроллерах исполняется из статичной flash-памяти, например).
В файле бинарника можно найти переменную
Помимо stack и heap есть нерастущая область для глобальных данных, куда копируется .data и где зануляется .bss
исходя из geeksforgeeks, эти секции хранятся как раз таки в области под хипом. Интересно, а это зависит от архитектуры процессора?
При чём тут вообще архитектура процессора? Это ж просто блин абстракция, условность, реализуемая осью и всё. Процессору вообще похрену что читать, что писать и что исполнять. Вон под виндой ты вообще можешь исполнять инструкции из хипа, да и под никсами, если права дать. На уровне архитектуры реализуется сама виртуальная память, она не имеет ничего общего с той моделькой, которую ты скинул.
При чём тут jit? Я тебе к тому, что это простая условность, у тебя и в дате могут храниться инструкции на исполнение и в стеке, да и вообще где угодно, хоть в аргументах командной строки. А касательно твоего вопроса... Ну это уж совсем детский сад какой-то. Компилятор, если что, компилит сишный код в язык ассемблера, ассемблер собирает секции, линкер вставляет относительные адреса на места символов и лишь при запуске ось располагает секции в памяти и не обязательно в тех сегментах на которые ты рассчитываешь, вообще сегментная память считается как бы устаревшей, в амд64 нет селектора.
cs, ss, ds, es, gs, fs
Ну это уже Shellcode получается 😁
Обсуждают сегодня