最近在调一个裸板程序时候发现单步跟踪到全局变量操作的时候,程序就飞了。
我们知道初始化的全局变量是放在data段的,为什么会出问题了。想了一会,发现在自己在链接的时候就简单的指定了一下-Ttext 0x3400。
以前认为,只要这样指定代码段后,后面的data段,bss 段应该接着后面存放。呵呵,这种想法是我自己的想法,但编译器不是我写的,人家不这样干。后来写了一个程序测试了一下,以下是反汇编的结果:
两者有明显的差别,如果想数据段是接着代码段后面存放的,还是需要自己写连接脚本文件;-Ttext 0x00这种指定方式仅仅是指定了一下代码段的运行地址,后面的数据段并不会在后面接着存放。
最后附上,整个测试代码。
lds.rar
阅读(6223) | 评论(0) | 转发(2) |