C: Переписать другую функцию байт за байтом

Предположим, у меня есть функция:

int f1(int x){
 // some more or less complicated operations on x
 return x;
}

И у меня есть другая функция

int f2(int x){
 // we simply return x
 return x;
}

Я хотел бы иметь возможность сделать что-то вроде следующего:

char* _f1 = (char*)f1;
char* _f2 = (char*)f2;
int i;
for (i=0; i<FUN_LENGTH; ++i){
 f1[i] = f2[i];
}

Т.е. я хотел бы интерпретировать f1 и f2 как необработанные байтовые массивы и "перезаписать f1 байт за байтом" и таким образом заменить его на f2.

Я знаю, что обычно вызываемый код защищен от записи, однако в моей конкретной ситуации можно просто перезаписать участок памяти, где находится f1. То есть, я могу скопировать байт на f1, но после этого, если я вызову f1, все рухнет.

Итак, возможен ли мой подход в принципе? Или есть какие-то проблемы, зависящие от машины/реализации/что угодно, которые я должен принять во внимание?

6
задан phimuemue 25 January 2012 в 21:41
поделиться