源码中访问ld脚本的变量

最近,在程序中查看ld文件定义的各段地址时发现一些问题。查看手册发现,在ld中定义的符号,只在符号表中创建该符号的entry,并未给它申请相应的空间。举例:

data_start=0x1000;

表示,在符号表中创建data_start的entry,且entry保存了内存地址0x1000,但是在地址0x1000未存储任何值。

这意味着无法访问ld中定义符号的值(它没有值),只能访问该符号的地址。

正确访问ld符号地址的方法:

假设ld中命令如下:

sections

{

        .text :

         {

                *(.text)

                text_end=.;

        }

}

在代码中查看text_end的值,实现方法如下:

【法1】

extern char text_end;

printf("text_end addr = %p\r\n", &text_end);

【法2】

extern char text_end[];

printf("text_end addr = %p\r\n", text_end);

疑问

下面这种方式访问是有问题的,如果有大神看到了,请不吝解惑,谢谢!!

extern char *text_end;

printf("text_end addr = %p\r\n", text_end);

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值