为什么没有-fpie在裸机代码中工作并引起狂野指针?

时间:2014-10-17 06:55:33

标签: c gcc arm ld cortex-a8

我正在使用基于cortex-A8的S5PV210。它以初始化开始,然后跳转到SDRAM的0x20000000并运行我的代码。所以我只需要将我的主函数放到0x20000000上。

据我所知,有两种方法可以做到。第一种方法是使用-Ttext = 0x20000000使.text从0x20000000开始。第二个是使用-fpie -pie生成与位置无关的代码。我正在使用后者。

它大部分时间都有效,但我被困在我的一个项目中。症状是printf(“123”)将打印永久的杂乱代码并且永远不会返回。如果我切换回使用-Ttext = 0x20000000,那么它将正常工作。

我已尝试过一些分析它的步骤:

  1. 更改我的main函数只需调用一个printf,这样我的代码就不会调用任何其他函数,如下所示:

    int main(){        的printf( “123”);        而(1);        返回0;  }

  2. 因为-fpie -pie在大部分时间都工作得很好,我开始评论其他一些函数,最后发现如果我评论了足够的代码,printf会再次运行。

  3. 现在我很困惑,-fpie和-pie真的有用吗?

1 个答案:

答案 0 :(得分:0)

行。我犯了一个愚蠢的错误。初始化会将我的代码从NAND复制到SDRAM中,其限制大小为5kb .....