请问怎么改变函数的入口地址

newbackup 2009-03-09 03:30:44
请问怎么改变函数的入口地址,
比如说现在定义了一个函数
int fun()
{
return 0;
}

还有一个与fun()的入参和返回值都相同的函数sub_fun()
int sub_fun()
{
return 1;
}

在main函数中调用fun()
main()
{
fun();
}

我现在想任何调用fun()的地方实际调用的都是sub_fun(),但又不必修改main()里面的代码请问该如何做?
我本来想修改函数指针fun的值的,但运行时会报错,意思是说fun的值不能更改。

请问哪位大侠有好的解决办法,谢谢!
...全文
628 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
tiankong17 2009-03-09
  • 打赏
  • 举报
回复
我只能想到这个:

#include <stdio.h>

#if 0
int fun()
{
printf("In fun");
return 0;
}
#endif

int sub_fun()
{
printf("In sub_fun");
return 0;
}

void (*fun)(void) = sub_fun;

main()
{
fun();
}
chaojiew 2009-03-09
  • 打赏
  • 举报
回复
修改函数的入口地址,c做不到吧,估计得用汇编
traceless 2009-03-09
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 dongpy 的回复:]
C/C++ codeintfun()
{returnsub_fun();
}
[/Quote]

妙 up
dongpy 2009-03-09
  • 打赏
  • 举报
回复
int fun() 
{
return sub_fun();
}
ctan 2009-03-09
  • 打赏
  • 举报
回复
使用函数指针:
 
int test1()
{
return 0;
}
int test2()
{
return 1;
}
void main()
{
int (*fp)();
fp = test1;
(*fp)(); //调用函数test1, C语言用这种形式
fp(); //C++用这种形式
fp = test2;
(*fp)(); //调用函数test2, C语言中这么写
fp(); //C++调用写法
}
zhirom 2009-03-09
  • 打赏
  • 举报
回复
windows 图形编程里有说
newbackup 2009-03-09
  • 打赏
  • 举报
回复
to:febag
我已经说了,你那个答案可以满足编程的需要,
但我现在是需要做单元测试,需要在另外一个文件里面写桩函数,而不能改测试函数函数所在的文件的。
独孤过儿 2009-03-09
  • 打赏
  • 举报
回复
当我没回...

问问题却不看答案,有意思...苦笑ing...
chenyingshu 2009-03-09
  • 打赏
  • 举报
回复
把sub_fun()这个函数封装到fun()里不可以吗?
newbackup 2009-03-09
  • 打赏
  • 举报
回复
我现在这边的情况是fun()与main()都在一个a.c文件中,这个文件中最多只能更改包含的头文件,里面的代码是不能改的,包括上面几位同学说用define的方法都是需要改.c文件的,这不符合我的要求。
sub_fun()在b.c中,这个文件是可以改的。

我目前是想做一个桩函数sub_fun(),用来测试main(),这样我可以控制sun_fun()的返回值,但又不必更改a.c文件。

谢谢上面几位热心的同学!
langhuazht 2009-03-09
  • 打赏
  • 举报
回复
#define fun() sub_fun(),
这样做不行,编译时,也把fun() 替换成了sub_fun(),最后报有两个相同的函数的错误

不要fun()这个函数了啊,先注释掉。
独孤过儿 2009-03-09
  • 打赏
  • 举报
回复

[root][~]# cat ctest.c
#include <stdio.h>

void func()
{
printf("func\n");
}

void func_sub()
{
printf("func_sub\n");
}

#define func func_sub

int main()
{
func();
return 0;
}
[root][~]# ./ctest
func_sub

newbackup 2009-03-09
  • 打赏
  • 举报
回复
你把sub_fun封装到fun里不行吗?
------------------可能我没有说清楚,我是想不必改main()和fun()的代码,就能使调用fun()的地方实际上调用的是sun_fun(),

独孤过儿 2009-03-09
  • 打赏
  • 举报
回复
在main()之前加上这么一句:

#define fun sub_fun
newbackup 2009-03-09
  • 打赏
  • 举报
回复
#define fun() sub_fun(),
这样做不行,编译时,也把fun() 替换成了sub_fun(),最后报有两个相同的函数的错误。
cyberwjf 2009-03-09
  • 打赏
  • 举报
回复
C语言的话似乎应该使用函数指针。
topwork 2009-03-09
  • 打赏
  • 举报
回复
在fun中调用sub_fun就行了。
  • 打赏
  • 举报
回复
你把sub_fun封装到fun里不行吗?
langhuazht 2009-03-09
  • 打赏
  • 举报
回复
#define fun() sub_fun()

70,005

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧