LINUX.ORG.RU

ARM relocatable & static linking


0

2

Строю бинарник под линуксом всякими arm-elf-*. Стандартная процедура построения выглядит следующим образом:

1. arm-elf-ld собирает из объектников elf файл. executable, static linked, D_Paged

2. arm-elf-objcopy выдергивает из elf 3 секции TCM,CODE, DATA

3. скрипт собирает и в один файл и зажимает в архив.

4. Архив грузится на борду и там работает

Захотелось подменить в бинарнике вызовы функции a1() на b1(). Скрипт который это делает может работать только с relocatable бинарниками. Я попробовал на шаге 1 получить relocatable с помощью ключа -r пропатчить его (или не патчить для начала, а просто повторить результат) после делаю arm-elf-ld bin.elf.reloc -o bin.elf. Bin.elf получается с теми же флагами что и в стандартной процедуре но при работе дальше, выясняется, что секция CODE больше чем в обычном варианте. strip не помогает. На борде бинарник не работает.

Вопрос: А что такого пихает туда линковщик что потом при перелинковке не удаляется и даже при strip не вырезается? Как это можно победить?



Последнее исправление: bobych (всего исправлений: 1)

А кто мешает воспользоваться -M или -Map дабы проверить, что подхватывается и как собирается. Можно еще --verbose.

В принципе после сборки (даже с -r) может быть уже бесполезно пытаться подменять вызовы, т.к. если они используют адресацию относительно pc, то уже на -r этапе будут разрешены.

У ld еще еcть полезный ключик --wrap для подмен на одном проходе. info ld в помощь.

io ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.