Мне нужно иметь возможность писать в функцию, а также выполнять ее, например, чтобы этот код (или аналогичный) выполнялся без сбоев:
#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
, однако он разрешает только запись или выполнение, ни оба свойства не имеют одновременно.