【问题标题】:Polygot include file for nasm/yasm and CPolygot 包含 nasm/yasm 和 C 的文件
【发布时间】:2018-04-05 22:25:13
【问题描述】:

我有一堆幻数,我想将它们包含在 C 程序和由 nasm 或 yasm 编译的汇编文件中。

在纯 C 中,该文件看起来像是一系列定义,例如:

#define BLESS   55378008
#define ANSWER        42
...

在 nasm 或 yasm 中,相同的包含可以实现为:

%define BLESS   55378008
%define ANSWER        42
...

唯一的区别是define 之前的前导字符:# 用于 C,% 用于 nasm。

有什么方法可以编写一个 polygot 包含,允许我将它包含在 C 和 nasm 中,并且只列出一次常量?

是的,我知道我可以使用sed 或其他任何方式从另一个文件生成一个文件。

【问题讨论】:

  • 你也可以在 asm 文件上运行 C 预处理器,包括 only-#define C 头文件。
  • 如果没有外部工具,答案是否定的。多年来,这一直是 NASM 论坛中的一个持续问题,如果没有一些外部解析,就无法做你想做的事。 NASM 有一个名为 h2incn 的基于贡献者的项目。许多外部选项 m4、cpp、sed 等。
  • @MichaelPetch - 如果您将其写为答案,它将被接受。

标签: c assembly x86 nasm yasm


【解决方案1】:

NASM 本身无法在汇编代码中包含 C 头文件。多年来,这一直是brought up in the NASM forum。您将需要一个外部工具来将 C 头文件解析为可用于 NASM 汇编语法的内容。

假设与 NASM 兼容的此类第 3 方贡献之一是 h2incn。我没有对它进行足够彻底的测试,因此不能说它对于所有用例都足够稳定或可用。

另一种方法是使用m4cpp 等其他工具对文件进行预处理,甚至使用sed 进行翻译

【讨论】:

  • 最新版本的 NASM 有什么变化吗?还是仍然需要运行一些外部 C 头文件预处理器将其转换为 NASM 定义?
  • @St.Antario 没有任何改变,仍然需要第三方实用程序。
猜你喜欢
  • 2011-01-29
  • 1970-01-01
  • 2013-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
  • 1970-01-01
相关资源
最近更新 更多