objdump vs size

2023年 10月 5日 67.0k 0

读《程序员的自我修养》一书,读到《3.3节 挖掘SimpleSection.o》,遇到一个问题:

使用如下命令查看目标文件SimpleSection.o中各个section的大小时:

objdump -h SimpleSection.o

结果显示.text section 的大小是:0000005b,转换为十进制等于91

使用size命令查看SimpleSection.o中各个section的大小时:

size SimpleSection.o

结果显示text section的大小时95(十进制)

奇怪! 大小竟然不相等。

起初以为《程序员的自我修养》这本书写错了。后面,我亲自在电脑上(Mac、Linux)试了一下,还真不一样。

那为什么呢?我确实花了一些时间搞明白这个问题。后面通过命令

man size

发现size命令有不同的“output format",我们也可以从这个网页上查看size的使用方法:www.man7.org/linux/man-p…

其中最重要的一段,我摘录如下:

The Berkeley style output counts read only data in the "text"
column, not in the "data" column, the "dec" and "hex" columns
both display the sum of the "text", "data", and "bss" columns
in decimal and hexadecimal respectively.

The GNU format counts read only data in the "data" column,
not the "text" column, and only displays the sum of the
"text", "data", and "bss" columns once, in the "total"
column.

我简单用数学公式翻译下上面两段话:

  • Berkeley style:

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

    size(data) = size(.data)

  • GNU format:

    size(text) = size(.text)

    size(data) = size(.data) + size(.rodata)

  • 当我们使用size命令时,默认使用的Berkeley style

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论