c - 用于 nasm/yasm 和 C 的 Polygot 包含文件

标签 c assembly x86 nasm yasm

我有一堆魔数(Magic Number),我想将它们包含在 C 程序和汇编文件中,以供 nasm 或 yasm 编译。

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

#define BLESS   55378008
#define ANSWER        42
...

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

%define BLESS   55378008
%define ANSWER        42
...

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

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

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

最佳答案

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

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

另一种方法是使用其他工具预处理文件,例如 m4 , cpp ,甚至用 sed 翻译

关于c - 用于 nasm/yasm 和 C 的 Polygot 包含文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46922099/

相关文章:

c - fatal error : interrupt. h : No such file or directory #include <interrupt. h>

c++ - 为什么在 C++ 中允许多个预增量但在 C 中不允许?

c - C语言初始化数组中的 `movq`和 `movw`是什么意思?

c - 汇编语言部-余数DX寄存器

c - 你如何使用非选项参数的 getopt()

计算数组大小

c++ - 哪些C/C++编译器可以使用推式弹出指令创建局部变量,而不仅仅是增加esp一次?

c++ - 在函数中更改数组值 - 内联汇编

assembly - 为什么我必须检查有符号操作的溢出标志而不是 8086 中的进位标志?

c++ - 如何在运行时区分 C++ 中的 Intel CPU 各代?