У меня есть несколько функций, которые я использую в Windows (около 200), и я хочу добавить им все общие функции. На основе флага, который я даю своему приложению, чтобы перехватить или не перехватить некоторые предопределенные функции.
Я имел в виду примерно следующее:
#define SHOULD_CHECK_STOP_MONITOR (1 == Configuration.dwShouldMonitor)
#define MY_CHECK_MACRO(f) (if(SHOULD_CHECK_STOP_MONITOR && /* What do I do here? */))
void MyHookedFunctionName_A(...)
{
if(!MY_CHECK_MACRO(__FUNCTION__))
goto lbl_Cleanup;
/* rest of code logic */
lbl_Cleanup:
return ...;
}
void MyHookedFunctionName_B(...)
{
if(!MY_CHECK_MACRO(__FUNCTION__))
goto lbl_Cleanup;
/* rest of code logic */
lbl_Cleanup:
return ...;
}
Результат, которого я хочу достичь, - это предварительно скомпилированная логика, которая должна выполняться не в динамической среде выполнения, а при компиляции. где, если 1 == Configuration.dwShouldMonitor
настроен на True
, он проверит остальную логику, где у меня будет какой-то предопределенный список имен функций ["MyHookedFunctionName_A", "MyHookedFunctionName_C", "MyHookedFunctionName_D"]
, и макрос будет знать, возвращать ли False
или True
на основе имени функции. Таким образом, в этом примере MyHookedFunctionName_B
будет выполняться, а MyHookedFunctionName_A
- нет из-за предопределенного списка при компиляции.
Возможно ли что-то подобное? для «сложной» логики, основанной на имени функции, и сравнить ее с предопределенными именами функций строк?
edit 2019.09.15: я добавляю сюда то, что мне хотелось бы получить после логики предварительной компиляции
void MyHookedFunctionName_A(...)
{
if(!(1 == Configuration.dwShouldMonitor && False))
goto lbl_Cleanup;
...
}
void MyHookedFunctionName_B(...)
{
if(!(1 == Configuration.dwShouldMonitor && True))
goto lbl_Cleanup;
...
}
Где True
или False
были сгенерированы во время компиляции на основе имен строк функций
constexpr
функцию ... - person HolyBlackCat   schedule 15.09.2019True
илиFalse
, которые я легко контролирую для всех моих функций, без необходимости в этой логике, чтобы быть выполняется динамически - person 0xAK   schedule 15.09.2019