码迷,mamicode.com
首页 > 其他好文 > 详细

浅挖《程序员的自我修养》的小问题

时间:2014-11-26 16:30:03      阅读:488      评论:0      收藏:0      [点我收藏+]

标签:style   io   ar   color   sp   文件   on   art   问题   

一、size中统计的text的大小与objdump中统计的一些大小不一致问题:

        size(size.text ) == size( objdump.text + objdump.rodata + objdump.eh_frame)

二、.rodata段大小的计算方法

.rodata段存放的是常量。用C代码写一段程序,其中有些东西是被编译器放到.rodata段的。
例如:

char* fmt = "12345678";
int main()
{
      uart_send_string(fmt);
}

则字符串常量"12345678"是放在.rodata段的。

通过objdump可以查看object或elf文件的段的分布
$ arm-linux-objdump -h main.o

这是一个没有被link的object文件,所以VMA/LMA的地址都是0x00。第一个字段表示段的大小。
.rodata的Size = 0x0000000C,即12个字节。"12345678"为什么需要12字节呢?因为字符串的末尾
还有一个NULL,所以共需9个字节。编译器把它对齐了一下,所以就用了12个字节

三、eh_frame段(根绝文章和网友回答推测的)

     eh是exception handing的缩写

     gcc处理异常时会生成eh_frame,可以推测eh_frame完全是依赖编译器的实现。

     eh_frame是dwarf调试信息的辩题。

     eh_frame的结构和debug_frame非常相似,因此用处可能是:计算函数调用栈。



浅挖《程序员的自我修养》的小问题

标签:style   io   ar   color   sp   文件   on   art   问题   

原文地址:http://blog.csdn.net/u012491514/article/details/41517477

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!