У меня есть приложение 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 байт, что безумно для такой простой программы.
Вот фрагмент «части» файла, который я ищу.
(точные выделенные части могут быть искажены)
Running
objcopy -I elf32-big -O binary main.o test.bin
дает 64-байтовый файл, который для по какой-то странной причине часть строки перемещается в начало файла, что делает невозможным правильную разборку таких инструментов, как ghidra и ida
Надеемся, что видно, что ссылка на «Hello» неверна.