【问题标题】:Easy way to verify symbol changes in nm report在 nm 报告中验证符号更改的简单方法
【发布时间】:2012-11-22 06:27:36
【问题描述】:

我正在使用 Suse gcc 编译器编译我的库(C 编程),然后生成该库的 nm 报告。我必须将该 nm 报告与以前的版本库进行比较,以检查当前版本库中存在和不存在的符号。

nm libxxx0.1.a > nm_0.1.txt
nm libxxx0.2.a > nm_0.2.txt

现在我只是用一些文本比较工具比较nm_0.1.txtnm_0.2.txt 文件。除了符号差异之外,我也得到了偏移差异。我不担心偏移差异。

是否有任何命令(在 windows 或 suse 中)可以简单地突出显示 nm 报告中的符号差异。

注意:生成的 nm 报告会非常大。手动打开该文本文件并使用某些工具删除该 nm 报告的第一列对于那个大 nm 文件来说不是一件容易的事。

【问题讨论】:

  • 对于 SUSE,请查看 diff (man diff)。
  • 通过 unix cut 命令删除第一列?
  • 实际上,cut 在这里表现不佳,因为第一列可以为空。也许nm lib.a | sed 's/.* [a-Z] \(.*\)/\1/' > symbols.txt
  • @BoBTFish 实际上,nm libxxx0.1.a | cut -c20- 工作正常。
  • 好点。对于非常大的文件,它可能也会比正则表达式快得多。

标签: c gcc binary symbols nm


【解决方案1】:

这是针对 Linux 的。您必须首先准备和排序您的 nm 输出

nm -g libxxx0.1.a | awk '{print $3}' | sort -u >nm_0.1.txt
nm -g libxxx0.2.a | awk '{print $3}' | sort -u >nm_0.2.txt

如果您对所有符号感兴趣,请忽略-g并使用cut而不是awk

nm libxxx0.1.a | cut -c20- | sort -u >nm_0.1.txt
nm libxxx0.2.a | cut -c20- | sort -u >nm_0.2.txt

那么你就可以用diff来展示差异了

diff -U0 nm_0.1.txt nm_0.2.txt

comm

comm -3 nm_0.1.txt nm_0.2.txt

【讨论】:

  • 这似乎不太好用,因为第一列可能是空白的,所以你最终会得到一些完全空白的行。
  • @BoBTFish 没有地址的行是未定义或弱符号。我想,这些在这里不相关。无论如何,答案已更新。
猜你喜欢
  • 2012-07-16
  • 1970-01-01
  • 2019-05-31
  • 1970-01-01
  • 2011-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多