读书人

位置无关代码实现请问

发布时间: 2012-10-06 17:34:01 作者: rapoo

位置无关代码实现请教
大家好:

小弟想实现一个函数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。

[解决办法]

探讨
大家好:

小弟想实现一个函数A,能拷贝到内存其他地址运行,实际也可以做到了,但是当我在A中调用另一个函数B后再拷贝到内存其他地址运行,则系统异常,挂死了,即使我把函数B也一同拷贝过去,也没有用,请问有没有了解的大侠,看看是什么原因造成的,谢谢.
以下是伪码,编译器是GCC:

void B()
{
........
}
void 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

读书人网 >C语言

热点推荐