最近,在程序中查看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);