У меня есть существующая кодовая база, которая написана на C. То, что я хочу достичь, - это изменить порядок вызова функции во время выполнения. Например, предположим, что func_A вызывает func_B. Я хочу, чтобы на основе некоторых условий всякий раз, когда вызывается func_B, вместо того, чтобы выполнять код внутри func_B, мы должны вместо этого выполнить func_C.Быстрый способ взлома вызовов функций в C
func_C (arg1,arg2)
{
return 1;
}
func_B (arg1,arg2)
{
return 0;
}
func_A()
{
/*The code is writen to always call func_B*/
return func_B(arg1,arg2)
}
main()
{
int result;
result = func_A();
//here result = 0 as expected.
/*Do some magic*/
result = func_A()
//result should be 1
}
Есть ли способ достичь этого на языке C, выполняя некоторые действия по исполнению/стеку? Я не против писать код Ассамблеи. Цель состоит в том, что я не должен изменять func_A, func_B и func_C
В вашем примере нет 'func_C', но почему бы просто не использовать указатели на функции? 'static int (* func_B_ptr) (arg1, arg2) = func_B;', замените вызовы func_B '' func_B_ptr', а затем присвойте 'func_C'' func_B_ptr'. – myaut
ИСПРАВЛЕНО Имена. Я не могу использовать указатели на функции, потому что тогда мне нужно соответственно изменить func_B и func_C. Цель состоит в том, чтобы добиться этого БЕЗ изменения func_A и func_B –
Если у вас есть исходный код C, измените исходный код C. Зачем вам захотеть встраиваться в сборку, если вы можете сделать это удобно с C? – PSkocik