GCC Make Code или Section имеют свойства Read Write и Execute. - PullRequest
0 голосов
/ 30 января 2019

Мне нужно иметь возможность писать в функцию, а также выполнять ее, например, чтобы этот код (или аналогичный) выполнялся без сбоев:

#include "stdio.h"

int function(int i) {
    i = i * 56;
    printf("%i\n",i);
    return i;
}

int main()
{
    printf("before\n");
    function(5);
    *(int*)function = 0;
    printf("after");
    return 0;
}

Ожидаемый результат будет

before
280
after 

В том месте, где строка *(int*)function = 0; не приводит к сбою программы из-за правил записи на запись.
Ограничения: я не могу использовать mprotect или VirtualProtect, поэтому мое лучшее предположение - это нечтоделать с модификатором __attribute__ GCC.Мне удалось использовать атрибут section, чтобы изменить его с .text на .data, однако он разрешает только запись или выполнение, ни оба свойства не имеют одновременно.

1 Ответ

0 голосов
/ 30 января 2019

Использование __attribute__((section(".tdata"))) до того, как функция, кажется, решит проблемы.

...