连接地址

人生过半 2019-09-02 01:31:47
我想搞清楚连接地址的概念,把链接地址改为0xffff fffc,目的就是想看它溢出后的影响。这样编译后再烧写,发现led还是能点亮,好像毫无影响。然后我看了下反汇编代码,发现反汇编代码只有两行,第一行地址是0xffff fffc,第二行地址是0x0,Address 0x0 is out of bounds。这样怎么还会正常运行呢?盼指点迷津。
源程序如下(简单的点灯程序,arm是2440):


int main()
{
unsigned int *pGPFCON = (unsigned int *)0x56000050;
unsigned int *pGPFDAT = (unsigned int *)0x56000054;


*pGPFCON = 0x100;


*pGPFDAT = 0;

return 0;
}

makefile如下:

all:
arm-linux-gcc -c -o led.o led.c
arm-linux-gcc -c -o start.o start.S
arm-linux-ld -Ttext 0xfffffffc start.o led.o -o led.elf
arm-linux-objcopy -O binary -S led.elf led.bin
arm-linux-objdump -D led.elf > led.dis
clean:
rm *.bin *.o *.elf *.dis
...全文
156 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zarelaky 2019-09-11
  • 打赏
  • 举报
回复
你用的是2440 baremetal模式测试程序?
如果是的化,用的应该是led.bin的话objcopy后的东西跟连接器没关系,
程序你又没有烧到样机的这个地址,
objdump解析elf时候地址溢出了。所以才显示2条汇编代码。


1,324

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧