Извините, если этот вопрос уже существует, потому что я надеюсь, что этот подход используется, но я просто не знаю, как это называется. Итак, моя цель - выполнить последовательность функций из памяти, для этого я скопировал размер первой и последней забавы c.
Это моя первая попытка:
source.cpp
void func1(int var1, int var2)
{
func2();
func3();
//etc.
}
void func2(...){...}
void func3(...){...}
void funcn(){return 123;}//last func as border, I do not use it
//////////////////////////////////////////////////
main.cpp
#include"source.cpp"
long long size= (long long)funcn-(long long)func1;// i got size of binary code of this funcs;
// and then i can memcpy it to file or smth else and execute by adress of first
Сначала это сработало правильно, но после обновления моих функций он разбился. Размер стал отрицательным. Затем я попытался прикрепить его к памяти более жестко:
source.cpp
extern void(*pfunc1)(int, int);
extern void(*pfuncn)();
void(*pfunc1)(int , int) = &func1;
void(*funcn)() = &funcn;
static void __declspec(noinline) func1(int var1, int var2)
{
//the same impl
}
static void __declspec(noinline) func2(...){...}
static void __declspec(noinline) func3(...){...}
static void __declspec(noinline) funcn(...){retunr 123;}
//////////////////////////////////
main.cpp
#include"source.cpp"
long long size= (long long) pfuncn - (long long) pfunc1;
//same impl
Это сработало после моего 1-го обновления, но потом мне пришлось обновить его снова, и теперь это дает мне неправильный размер. Размер был около 900+ байт. Я изменил некоторые функции, и размер стал 350+ байтов, я не так много менял. Я отключил оптимизацию и встроенную оптимизацию.
Итак, мой вопрос в том, как быть уверенным, что моя функция func1 будет иметь меньший адрес, чем последняя функция, и что может изменить их местоположение в памяти. Спасибо за внимание.