位置无关代码实现请问
位置无关代码实现请教大家好:小弟想实现一个函数A,能拷贝到内存其他地址运行,实际也可以做到了,但是当我在
位置无关代码实现请教
大家好:
小弟想实现一个函数A,能拷贝到内存其他地址运行,实际也可以做到了,但是当我在A中调用另一个函数B后再拷贝到内存其他地址运行,则系统异常,挂死了,即使我把函数B也一同拷贝过去,也没有用,请问有没有了解的大侠,看看是什么原因造成的,谢谢.
以下是伪码,编译器是GCC:
void B()
{
........
}
void A()
{
B();
}
main()
{
memcopy(dest,A_addr,len);
((void(*)(void))dest)();
}
其中A_addr是,函数A在text中的首地址,len是A+B两个函数在代码段中的长度,函数A和B在text中的布局是先A后B。
[解决办法]
[解决办法]linux 下最简单好不, 我一般都在linux下生成 pic 代码, 随便在win/linux/rtos上跑都没问题的说. linux 下现在也没啥人用a.out了, 一般都是elf ...
你上面的 test.c 应该访问了啥全局变量啥的, 不加 -fpic 生成的代码是不行的 ..
这有个简单讨论, 好像里面错误也有些, 就不管了 ...
http://topic.csdn.net/u/20110625/01/3cbc6e37-4a9f-485a-8880-af093c145ad3.html