【发布时间】:2021-11-30 15:17:37
【问题描述】:
我正在用 C 和汇编语言编写一个小型库。我几乎完成了linux版本。我用-static -nostdlib 构建,让windows 构建linux 二进制文件很简单。在 linux 上,我使用程序集为 main 获取 argc+argv 并通过 syscall 实现 linux 调用,这样我就可以执行 mmap、打开/写入/读取/关闭等操作。
现在我想为 windows 编写程序集。据我了解,我不想进行系统调用或依赖硬编码地址。在研究时,我发现few examples 使用 NASM 和 MASM 通过在程序集文件中指定函数名称来调用窗口函数。我想编写与 clang 兼容的程序集,而且我对程序集很陌生
我的问题是如何从 clang 理解的程序集文件中调用 OpenFile 和 VirtualAlloc?我可能需要哪些构建选项?我最终会想从 linux 构建 windows 二进制文件,但我将从在 windows 上构建开始,直到我得到程序集和我的其余代码工作
【问题讨论】:
-
半相关:你提到想在 Linux 上用最少的库编写纯 asm 的东西。有关 Windows 等效的问答是 FASM write Hello World to console with NO includes or dependencies at all。显然,Windows 程序加载器 always 将几个 DLL 映射到进程的地址空间中,即使它们没有明确提及。 (我忘记了答案/cmets是否在我学到的地方或其他地方。)
标签: c windows assembly clang x86-64