LINUX.ORG.RU

Можно добавить в elf еще одну секцию. В ld ыскшзеу .это будет выглядеть так:

SECTIONS {
...
__begin_mytext = .;
.mytext : {
*(.mytext)
}
__end_mytext = .;
...
}

Потом в программе запихнуть в эту секцию массив забитый нулями. Приблизительно так:

char arr[100] __attribute__((__section__(".mytext"))) = {0};

А потом в другом месте программы сделать след.

extern char __begin_mytext;
extern char __end_mytext;

Таким образом &__begin_mytext будет указывать на первый байт этой секции, а &__end_mytext на последний - 0x10. Это от того, что выравнивание будет 16 байт.

Потом берешь, и пишешь туда свой код. А потом выполняешь его используя
&__begin_mytext.

Как туда код записать? Нваверное может быть несколько путей, но мне видится такой:

Пишешь прогу, в ней свою процедуру. Потом компилишь и смотришь/сохраняешь например objdump или objcopy. Вот и все. Не так много работы.


Banshee
()

Поправки:

1. я говорил об ld-script-е
2. &__end_mytext указывает на конец новой секции.

Выравнивание это я немного не из той оперы :))

Banshee
()

Где взять ld-script?

anonymous
()

Так, определимся с понятиями: :)) ld - linker ld-script - скрипт для линкера

Banshee
()

Наверно я неправильно выразился. Где лежит default ld-script, который нужно поправить?

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