Форум — Development Как создать еще одну кодосекцию в ELF? assembler, elf, gcc 1 3 Каким образом можно создать еще одну секцию кода в эльф файле , на Си ? На Асме оно понятно как, т.е. .code ... .code1 .. а как здесь? Или невозможно? Ответить Ссылка
Конфиг для ld наверное написать. Оно? http://www.kaizou.org/2016/08/decentralized-modules-c-elf-sections.html LINUX-ORG-RU ★★★★★ (25.06.24 23:36:04 MSK) Ответить Ссылка
Вот пример патча для древних телефонов Siemens с использованием GCC и секций кода в ELF и превращения их в ELF => BIN после. Вычлени нужное. patch.c: #define func1 ((int (*)(void)) (0xA096FE9F)) #define func2 ((void (*)(int)) (0xA0092A94)) const unsigned char arr[] = { 0xDE, 0xAD, 0x92, 0x6E }; __attribute__((target("thumb"))) __attribute__((section(".text.entry1"))) int _entry1(void *csm, void *p1, int p2) { func1(); func2(0); return arr[0]; } __attribute__((target("thumb"))) __attribute__((section(".text.entry2"))) int _entry2(void *csm, void *p1, int p2) { func1(); func2(0); return arr[0]; } patch.ld: SECTIONS { .patch1 0xA1000000 : { KEEP(*(.text.entry1*)) KEEP(*(.rodata*)) } .patch2 0xA2000000 : { KEEP(*(.text.entry2*)) } } Makefile: all: arm-none-eabi-gcc -mcpu=arm926ej-s -std=c11 -Os -mthumb-interwork -msoft-float -mlittle-endian -c patch.c -o patch.o arm-none-eabi-ld -zmax-page-size=1 patch.o -o patch.elf -T patch.ld arm-none-eabi-objcopy -O binary -j .patch1 patch.elf patch1.bin arm-none-eabi-objcopy -O binary -j .patch2 patch.elf patch2.bin arm-none-eabi-objdump -D patch.elf cat patch1.bin | xxd -ps -c 200 cat patch2.bin | xxd -ps -c 200 clean: rm -f patch.o patch.elf patch*.bin EXL ★★★★★ (25.06.24 23:43:35 MSK) Ответить Ссылка 👍 3 🔥 2
-ffunction-sections сделает каждую функцию в отдельной секции. Про атрибут __attribute__((section(".text.my_section"))) уже сказали. А, вот ещё способ: void text_function1() { asm("nop\n"); } asm(".pushsection .code1, \"ax\"\n"); void code1_function() { asm("nop\n"); } asm(".popsection\n"); void text_function2() { asm("nop\n"); } Так можно сделать даже чтобы секция была writable) https://sourceware.org/binutils/docs/as/Section.html anonymous (26.06.24 07:24:46 MSK) Ответить Ссылка