История изменений
Исправление shkolnick-kun, (текущая версия) :
Написать функцию my_cool_new для выделения памяти, служебную функцию _my_cool_free_em_all для освобождения и макрос обертку для пользовательского кода по типу:
#define MY_COOL_FUNC(type, func,...) \
type func##payload(__VA_ARGS__); \
type func(__VA_ARGS__) \
{ \
type ret; \
ret = MY_COOL_JMP(func##payload); \
_my_cool_free_em_all(); \
return ret; \
} \
type func##payload(__VA_ARGS__)
Придется делать костыльна асме, если без него, то тогда просто макросы
#define MY_COOL_ENTER() _my_cool_alloc_stack_init()
#define MY_COOL_RETURN _my_cool_free_em_all();return
Но его наличие придется проверять ручками или статическим анализвтором.
Исправление shkolnick-kun, :
Написать функцию my_cool_new для выделения памяти, служебную функцию _my_cool_free_em_all для освобождения и макрос обертку для пользовательского кода по типу:
#define MY_COOL_FUNC(type, func,...) \
type func##payload(__VA_ARGS__); \
type func(__VA_ARGS__) \
{ \
type ret; \
ret = MY_COOL_JMP(func##payload); \
_my_cool_free_em_all(); \
return ret; \
} \
type func##payload(__VA_ARGS__)
Придется делать костыльна асме, если без него, то тогда просто макросы
#define MY_COOL_ENTER() _my_cool_func_enter()
#define MY_COOL_RETURN _my_cool_free_em_all();return
Но его наличие придется проверять ручками или статическим анализвтором.
Исправление shkolnick-kun, :
Написать функцию my_cool_new для выделения памяти, служебную функцию _my_cool_free_em_all для освобождения и макрос обертку для пользовательского кода по типу:
#define MY_COOL_FUNC(type, func,...) \
type func##payload(__VA_ARGS__); \
type func(__VA_ARGS__) \
{ \
type ret; \
ret = MY_COOL_JMP(func##payload); \
_my_cool_free_em_all(); \
return ret; \
} \
type func##payload(__VA_ARGS__)
Придется делать костыльна асме, если без него, то тогда просто макрос
#define MY_COOL_RETURN _my_cool_free_em_all();return
Но его наличие придется проверять ручками или статическим анализвтором.
Исходная версия shkolnick-kun, :
Написать функцию my_cool_new для выделения памяти, служебную функцию _my_cool_free_em_all для освобождения и макрос обертку для пользовательского кода по типу:
#define MY_COOL_FUNC(type, func,...) \
type func##payload(__VA_ARGS__); \
type func(__VA_ARGS__) \
{ \
type ret; \
ret = MY_COOL_JMP(func##payload); \
_my_cool_free_em_all(); \
return ret; \
} \
type func##payload(__VA_ARGS__)