使用 NASM 和 mingw 命令时出现编译错误

发布于 2025-01-11 00:02:56 字数 427 浏览 1 评论 0原文

我想玩一下汇编。首先,我创建了一个小asm脚本并尝试编译它。第一步一切都很顺利:

nasm -felf64 hello.asm

但是当我尝试使用

ld -o hello.o 你好

从 MinGW 发生错误:

hello.o:文件无法识别:文件格式无法识别

我可以做什么来解决这个问题?我也用 gcc 尝试过,但随后出现了相同的错误以及另一个错误。

I want to play a bit with assembly. To get started I've created a little asm script and tried to compile it. In the first step everything went great:

nasm -felf64 hello.asm

But when I tried to use

ld -o hello.o hello

from MinGW an error occured:

hello.o: file not recognized: File format not recognized

What can I do to fix this problem? I've tried it with gcc as well but then the same error plus one other error occurs.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧城空念 2025-01-18 00:02:56

MinGW 创建针对 Windows 的二进制文件。 Windows 不支持 ELF 二进制文件(或者 Linux 的 Windows 子系统支持吗?)。无论如何,MinGW 中的 ld 会期望您提供 win64 格式的二进制文件,而不是 elf64 格式的二进制文件。

nasm -fwin64 hello.asm 很可能会起作用。


不,它不会工作,因为我刚刚看到你的代码,并且你在 Windows 下使用 Linux 系统调用。

请写下来

mov rcx, 69
call ExitProcess

,而不是发表评论。

mov rax, SYS_EXIT
mov rdi, 69
syscall

如果不起作用,

MinGW creates binaries targeting Windows. Windows does not support ELF binaries (or does it? with Windows subsystem for Linux?). Anyway, ld in MinGW will expect that you provide binaries in win64 format not elf64.

nasm -fwin64 hello.asm will most likely work.


No it won't work because I just saw your code, and you are using Linux syscalls under Windows.

Write,

mov rcx, 69
call ExitProcess

instead of,

mov rax, SYS_EXIT
mov rdi, 69
syscall

Leave a comment if it doesn't work.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文