LINUX.ORG.RU

История изменений

Исправление 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__)