Как удалить «раздувание» из скомпилированного общего объекта? - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть приложение ag cc C, которое компилируется в общий объект с использованием опции -fpic. Намерение состоит в том, чтобы создать «исполняемый файл», который позволяет запускать код в любом месте в памяти. Так компилируется пример программы C.

./armeb-eabi-gcc -march=armv5t -mbig-endian -nostdlib  -fpic   -c  main.c

main. c

 int main(){
    void (*UART)() = 0x594323 | 1;
    UART("Hello");
}

Проблема в том, что скомпилированный исполняемый файл имеет «раздувание», где я ищу только машинный код и никаких символов. Я не смог извлечь точные порции из objcopy и objdump, которые абсолютно ничего не сделали. Размер файла составляет около 948 байт, что безумно для такой простой программы.

Вот фрагмент «части» файла, который я ищу. hex dump of main.o

(точные выделенные части могут быть искажены)


Running

objcopy -I elf32-big -O binary main.o test.bin

дает 64-байтовый файл, который для по какой-то странной причине часть строки перемещается в начало файла, что делает невозможным правильную разборку таких инструментов, как ghidra и ida hex dump of the sanitized file enter image description here

Надеемся, что видно, что ссылка на «Hello» неверна.

...