Предположим, у меня есть функция:
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
, все рухнет.
Итак, возможен ли мой подход в принципе? Или есть какие-то проблемы, зависящие от машины/реализации/что угодно, которые я должен принять во внимание?