【问题标题】:Assemble with nasm including only referenced blocks of code/data使用 nasm 组装,仅包含引用的代码/数据块
【发布时间】:2016-07-31 14:49:13
【问题描述】:

在为 nasm 编写一些简单的库时,我注意到未实际调用或引用的标签仍包含在二进制文件中。

在使用 nasm 构建/编译/组装时,有什么方法可以避免在对象中包含未使用的标签及其对应的代码?

【问题讨论】:

  • 使用.label制作本地标签。 YASM 默认不在输出的符号表中包含非全局标签。 (如果您使用 -gdwarf2 发出调试信息,它确实包括它们。)我不确定您是否可以使用 NASM 来禁止常规符号进入符号表,而不是 strip
  • @PeterCordes 不仅仅是符号,还包括符号指向的代码。我想我可能不得不求助于一些骇人听闻的宏来让它做到这一点,但我宁愿不这样做。

标签: assembly x86 nasm


【解决方案1】:

这方面的技术已经以静态库的形式存在。

将每组可分离的代码+数据放在一个单独的.o 中,并从所有这些对象(使用ar)构建一个静态库(.a)。

与此静态库的链接将自动仅拉入满足依赖关系所需的对象(.o 库成员)。 (和 AFAIK,这递归地工作,拉入其他库对象以满足初始对象集中未解析的符号)。

【讨论】:

  • 最好说它只会自动拉入包含引用符号的目标文件(.o 文件)。
  • @RossRidge:谢谢;我是想说,但编辑后没有注意到我没有!我在快速搜索中没有找到任何确切的重复项。关于如何创建静态库的几个问题,但没有一个问题不是已经在寻找一个。 TODO:我猜是链接一个很好的图书馆创建答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-20
  • 1970-01-01
  • 2011-11-25
  • 2021-06-02
相关资源
最近更新 更多