【发布时间】: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 我删除了嵌入式和微控制器标签。
-
因为构建新工具所花费的时间可能比您在这个问题上花费的时间要少。将内容粘贴到电子表格中并根据建议对其进行排序。 support.office.com/en-gb/article/…