|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Boris Shklyaev 2:5079/67.43 04 Sep 2006 23:43:11 To : Dmitry E. Oboukhov Subject : получить чистый бинарник -------------------------------------------------------------------------------- DO> вопрос 1: как из C узнать размеры сегментов .text, .rodata и .data? DO> очень не хочется на Асме стартап код писать. но соответственно если DO> альтернатив нет, то тот же вопрос про АСМ: как узнать в нем размеры DO> тех же сегментов? думаю, никак. этими делами лоадер ELF-ов занимается. можно открывать файл и читать хедер файла (т.е. статически). но из программы открыть себя не получится, по крайней мере, "movl $4,%eax / int $0x80", скомпилированные в as/ld вызывают Segmentation Fault. придется вписывать константы в бинарь. прямо вычислять смещение относительно EP (0x8048054 или даже больше) и подставлять. энтрипоинт лежит в elf-хедере dword-ом по смещению 0x18. DO> вопрос 2: есть ли гарантия того что линкуемое последним попадает в DO> конец? да вроде так оно и есть. во всяком случае, hex-редакторы никто не отменял :)) DO> вопрос 3: как слинковать так чтобы сегмент .data попадал сразу после DO> сегмента .text? то есть если .text меняет свои размеры от компиляции к DO> компиляции чтобы и .data менял свое положение? а разве расположение не такое? [Text] [Initialized Data] [Uninitialized Data] [Stack] т.е. насколько я знаю, данные всегда после кода идут. типа соглашение такое, чтобы загрузчику лишний раз не возиться. _/Good Luck, Dmitry./_ *ФИТ-152* --- GED+W32 (but Linux best!) * Origin: Старик Похабыч (2:5079/67.43) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/340844fc65d4.html, оценка из 5, голосов 10
|