在具有与此类似的预编译二进制文件的系统中:
int foo(int bar) {
// do something wrong
return ...;
}
在运行时,是否有一种方法可用于将调用该函数的效果更改为:
int foo(int bar) {
return fixedFoo(bar);
}
不改变其他二进制文件?即我可以做一些内存hackery来改变调用foo的功能吗?
遗憾的是,我不能预先修补二进制文件,因为foo的正确行为取决于运行时启动的结果。
答案 0 :(得分:0)
如果您有权访问源代码,可以将foo设为函数指针,然后在“运行时启动”之后将foo设置为您想要的例程。
#include <stdio.h>
int (*foo)(int);
int bar(int a) { printf("bar %d\n", a); return 0; }
int baz(int a) { printf("baz %d\n", a); return 0; }
int main(void) {
// do start up here
foo = bar;
foo(23);
return 0;
}
打印
bar 23