【问题标题】:Filter the output of GNU nm by section按部分过滤 GNU nm 的输出
【发布时间】:2020-03-07 22:48:36
【问题描述】:

我正在尝试识别.elf 文件中每个内存部分(.text、.data、.bss)的最大符号。到目前为止,我使用GNU nm 来获得最大的符号:

nm foo.elf --size-sort --reverse-sort --radix=d --demangle --line-numbers

nm 中是否有内置方法来按部分过滤输出,还是我需要求助于文本过滤?

nm 将每个符号的节类型输出为单字母代码(B:.bss,D:.data,T:.text),但似乎无法按符号类型进行过滤。

背景:代码运行在能够直接从闪存执行指令的微控制器上。 .text 部分的指令在执行期间保留在闪存中,.bss 和 .data 被加载到 RAM 中。这就是我希望能够独立识别每个部分中最大的符号的方式。

【问题讨论】:

  • 为什么不使用链接器生成的地图文件?当您能够获得第一手信息时,使用 nm 有点“逆向工程”。
  • 您已“过度标记”此问题。地图所指的目标是嵌入式微控制器这一事实在很大程度上是无关紧要的,精灵也是如此——这只是许多人可以回答的文本处理问题。 “简单的方法”是主观的,因此过于宽泛。
  • @Clifford 我删除了嵌入式和微控制器标签。
  • @Clifford 你知道有什么工具可以从 .map 文件中找到按部分排序的最大符号吗?这实际上是我首先尝试的,但我查看的两个工具(AMAPMapViewer)都不提供按部分和大小排序的可能性。当然,我可以为此编写一个脚本,但是如果我可以使用 nm,为什么还要构建一个新工具呢?
  • 因为构建新工具所花费的时间可能比您在这个问题上花费的时间要少。将内容粘贴到电子表格中并根据建议对其进行排序。 support.office.com/en-gb/article/…

标签: elf binutils nm


【解决方案1】:

似乎没有办法按符号类型过滤。

只需使用grep 执行您可能需要的任何过滤。

您可能还想查看Bloaty McBloatface: a size profiler for binaries

【讨论】:

  • 谢谢,有时很难看到解决方案,尽管好的 grep 就在您的眼前。我最后使用了以下一个衬里:nm foo.elf --size-sort --reverse-sort --radix=d --demangle --line-numbers | grep -i " t " | lessgrep -i " t "将过滤 .text 部分中的所有符号(使用正则表达式可能会更优雅地进行过滤)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 2022-11-30
  • 2018-05-19
  • 2016-08-13
  • 1970-01-01
  • 1970-01-01
  • 2015-06-10
相关资源
最近更新 更多