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