|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Dmitry Fedorov 2:5020/400 05 Sep 2006 10:05:09 To : Dmitry E. Oboukhov Subject : Re: получить чистый бинарник -------------------------------------------------------------------------------- 2006-09-04, Dmitry E. Oboukhov <Dmitry.E.Oboukhov@p151.f75.n5004.z2.fidonet.org> пишет: > > вопрос 1: как из C узнать размеры сегментов .text, .rodata и .data? > очень не хочется на Асме стартап код писать. но соответственно если > альтернатив нет, то тот же вопрос про АСМ: как узнать в нем размеры тех > же сегментов? info ld Scripts подскажет ответы на многие вопросы. extern char _text[], _etext[], _data[], _edata[], _bstart[], _bend[]; ptrdiff_t textsize = _etext - _text + 1; // примерно так ptrdiff_t datasize = _edata - _data + 1; // но не для всех нужных тебе секций определны такие символы, так что придется тебе править скрипты линкера, добавляя символы начала и конца в нужные секции. > вопрос 2: есть ли гарантия того что линкуемое последним попадает в > конец? Да, на этом стоят стоят некоторые важные механизмы, в частности, таблицы конструкторов и деструкторов. > то есть теоретически можно было бы определить один из модулей с > псеводофункцией в сегменте .text (меткой) по которой и по адресу начала > сегмента .text вычислили бы его размер. Так и есть, смотри выше. > именно в таком порядке, то насколько можно быть уверенным что c.o > попадает точно в конец? можно. > вопрос 3: как слинковать так чтобы сегмент .data попадал сразу после > сегмента .text? то есть если .text меняет свои размеры от компиляции к > компиляции чтобы и .data менял свое положение? свой линкерный скрипт. --- ifmail v.2.15dev5.3 * Origin: INP (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/10175a344824a.html, оценка из 5, голосов 10
|