目标:模拟(main.c)而不修改任何原始文件(work.a)
objcopy work.a --add-symbol _real_test1=.text:00000000000126ed,weak --weaken work.a
00000000000126ed 是命令的 test1 地址 (nm work.a)
在没有原始文件的情况下覆盖函数并在 main.c 中调用真实函数
它可以工作
#work.a
void test1(){
printf("old");
}
void test2(){
test1();
}
#main.c
int real_flag=0;
void test1(){
if(real_flag){
_real_test1();
}else{
printf("new");
}
}
int main(){
test2();//print new
real_flag=1;
test2();//print old
}
问题:我怎样才能制作多个 real_function
例如:test1,__real_test1 test2,__real_test2...
或其他模拟功能的方法
尝试失败
尝试失败:因为它需要修改原始文件work.a
void _real_test1() __attribute__((alias("test1")));
尝试失败:因为它只是修改函数名而不是模拟函数
objcopy --redefine-syms
尝试失败:因为它只在 main.c 中工作,它仍然在 work.a 中调用旧的 test1
gcc -Wl,--wrap=test1