Всем привет! Мне нужно следующее: каким-либо образом определять начало/конец слинкованного объектного файла С. Это нужно, чтобы потом эту область можно было затереть и занять другим модулем или данными. Возникает вопрос: в каком порядке располагаются функции/переменные в слинкованном файле, если исходники обрабатываются скачала gcc, потом ld? Если этот порядок фиксирован, то можно сделать по одной фиктивной переменной в начале и конце и использовать их адреса. Как вариант, уже проверенный, можно вставлять между двумя объектниками код на nasm: Код (Text): global border_ith border_ith: Но, с учётом немалого к-ва модулей, это решение весьма громоздкое, хотя и вполне, вроде, приемлемое в остальных отношениях
Порядок формально детерминирован, но никем не гарантирован. И может менятся как от смены порядка компиляции/линковки, так и от внесения изменений в исходные файлы. Все адреса явно указаны в map файле. Ну или objdump'ом (для отдельного .o файла). Если нужно расположить какие-то секции по определенным адресам, то надо читать доки по скриптам ld и править например файл i386elf.x.
Nothing Верно. Именно в нём задаётся порядок секций. В обьектнике можно задать секциям уникальные имена и потом указать эти имена в i386elf.x в нужном месте и порядке.