首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

位置无关代码实现请问

2012-10-06 
位置无关代码实现请教大家好:小弟想实现一个函数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。

[解决办法]

探讨
大家好:

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

热点排行