首页 > 代码库 > 浅挖《程序员的自我修养》的小问题
浅挖《程序员的自我修养》的小问题
一、size中统计的text的大小与objdump中统计的一些大小不一致问题:
size(size.text ) == size( objdump.text + objdump.rodata + objdump.eh_frame)
二、.rodata段大小的计算方法
.rodata段存放的是常量。用C代码写一段程序,其中有些东西是被编译器放到.rodata段的。
例如:
char* fmt = "12345678";
int main()
{
}
则字符串常量"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非常相似,因此用处可能是:计算函数调用栈。
浅挖《程序员的自我修养》的小问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。