我有一个用C编写的现有代码库。我想要实现的是在运行时更改函数调用顺序。例如,假设func_A调用func_B。我想要的是,基于某些条件,每当调用func_B时,我们应该执行func_C而不是执行func_中的代码。
%_Host@User> ./hash.pl
$VAR1 = {
'KeyLL1' => {
'KeyLLL2' => [
2,
3
],
'KeyLLL1' => [
1,
2
]
},
'KeyLL2' => {
'KeyLLL2' => [
2,
3
],
'KeyLLL1' => [
1,
2
]
},
'KeyLL3' => {
'KeyLLL2' => [
2,
3
],
'KeyLLL1' => [
1,
2
]
}
};
$VAR1 = {
'KeyLLL2' => [
2,
3
],
'KeyLLL1' => [
1,
2
]
};
$VAR1 = [
1,
2
];
%_Host@User>
有没有办法通过执行一些程序执行/堆栈操作来实现C语言?我也不介意编写汇编代码。目标是我不应该改变func_A,func_B和func_C
答案 0 :(得分:0)
A"快速"方法是使用if-else
或switch
语句根据某些条件调用不同的函数。 :)
func_A ()
{
if(condition)
{
/*The code is writen to always call func_B*/
return func_B(arg1,arg2);
}
else
{
/*The code is writen to always call func_C*/
return func_C(arg1,arg2);
}
}
答案 1 :(得分:0)
您可以通过可写的全局函数指针来路由调用:
#include <stdio.h>
int (*func_A)(void);
int (*func_B)(void);
int (*func_C)(void);
int
func_C_ ()
{
return 1;
}
int
func_B_ ()
{
return 0;
}
int
func_A_ ()
{
/*The code is writen to always call func_B*/
return func_B();
}
int (*func_A)(void) = func_A_;
int (*func_B)(void) = func_B_;
int (*func_C)(void) = func_C_;
int main()
{
int result;
result = func_A ();
printf("%d\n", result);
//here result = 0 as expected.
/*Do some magic*/
func_B = func_C;
result = func_A ();
printf("%d\n", result);
//result should be 1
}
这很快捷。实时编辑操作码可能不会(我也希望通过实时操作码编辑来完成)。