По-видимому функции, которые надо будет размещать по строго фиксированным адресам, надо будет располагать в разных секциях
Я нашёл как размещать функции по адресам. Спасибо.
Вы-бы тогда привели своё решение, вдруг кому-то ещё понадобится - поищет он по форуму, найдёт Ваш вариант, и скажет Вам спасибо.
А вот можно именно программный модуль (объектный файл) разместить в заданном адресе?
В объектном файле могут быть как минимум секции кода и данных. По современным понятиям код должен быть защищен от записи, а данные - могут быть защищены (константные данные, не изменяемые строки и т.д.) или не защищены (глобальные переменные) от изменения, а кроме того ещё и защищены от выполнения. При линковке все секции кода из объектных файлов собираются в одну исполняемую секцию .text, все секции неизменяемых данных - в секцию .rodata, а все изменяемые - в секцию .data.
С учётом сказанного выше, не понятно, как для Вашего случая проводится защита, но Вы можете попробовать что-то типа такого:
OUTPUT_ARCH(i386)
ENTRY(_entry)
{ . = 0x83010000;
.text : {
. = 0x83010000;
module1.o(.text*)
module1.o(.rodata*)
module1.o(.rdata*)
module1.o(.data*)
. = 0x83020000;
module2.o(.text*)
module2.o(.rodata*)
module2.o(.rdata*)
module2.o(.data*)
. = ALIGN (4K);
} = 0xcccccccc
.bss . : {
*(.bss)
}
.eh_frame (NOLOAD) : {
*(.eh_frame)
} :NONE
/DISCARD/ : {
*(.rdata$zzz)
}
. = ALIGN (0x1000);
}
Надо, конечно, проверять, но запись типа
objectfile.o(.
section) официально заявлена в документации и должна работать.