【问题标题】:64-bit windows assembler64 位 Windows 汇编程序
【发布时间】:2012-05-29 07:49:28
【问题描述】:

我想编写 64 位 Windows 程序集(最好使用 NASM)。我在谷歌上看起来很不错,但似乎找不到 64 位 Windows 编译器。一些网站提到了 ml64,但它似乎不再包含在 VC++ 中。我尝试过使用 32 位汇编,但显然它只是在我的 64 位机器上崩溃了。是否可以在 64 位 Windows 机器上编写、编译和运行 32 位汇编应用程序?还是应该写成64位编译?

谢谢。

【问题讨论】:

  • 作为记录,ml64.exe 包含在我安装的 VS2010 中。我不确定它是否包含在 Express 版本中...
  • VS2010 Express 用户在这里,ml64.exe 存在于 Visual Studio/VC/bin/amd64 和 bin/x86_amd64 文件夹中。
  • 如果你想使用NASM,那就去nasm.us下载Win32版本的NASM。它将在 64 位系统上运行,并将创建 64 位应用程序。
  • @PinnyM 和 DCoder - 谢谢我从来没有检查过我自己的目录 doh。我也发现了它。
  • @JimMischel - 我试过了,但我的程序崩溃了。也许我有一些错误的代码。我会努力寻找比我所关注的更好的教程。

标签: assembly 64-bit compatibility 32-bit


【解决方案1】:

可以在 64 位 Windows 上编写、汇编和运行 32 位汇编。我在我的 Windows 7 x64 机器上用 masm32 编写了一些实用程序。如果要汇编64位代码,我相信FASM支持64位目标代码。

【讨论】:

    【解决方案2】:

    Yasm(*) 是一个现代的、多平台的 NASM 重写的汇编程序,能够为 x86 和 AMD64/x86-64 指令集进行汇编。

    但是... 您可能的意思是您需要一个链接器 来链接组装的目标代码/文件以创建可执行文件。至少完全免费的 MinGW(Minimal GNU for Windows)项目包附带了一个链接器(称为 ld),它能够从目标文件(至少是 ELF 和 PE 目标格式)组装 32 位和 64 位 Windows 可执行文件。

    如果您向汇编器和链接器提供正确的命令行参数,您绝对可以在 64 位环境中交叉编译/构建 32 位项目,反之亦然。请参阅您选择的工具的文档以获取更准确的详细信息。

    *) http://yasm.tortall.net/

    【讨论】:

    • 没错。感谢您指出,我匆忙完全误解了上下文并混淆了术语。我已经编辑并增强了答案以获取更多详细信息。
    • 非常感谢您的帖子。我正在使用 ld 链接它,但它似乎仍在崩溃。您是否可以向我提供可以用 yasm 编译并在 64 位系统上链接但用 32 位汇编编写的汇编代码的 sn-p?它不需要做任何事情。只需编译并运行而不会崩溃。那太好了。
    • 我没有可用的 Windows 机器,但在 Linux 机器上,您真正需要做的就是使用 yasm '-f' 标志(Windows 中的 \f?)和 'elf32'(' win32' for Windows)作为参数。然后,对于 ld,您使用带有 'elf_i386' 参数的 '-m'(同样,使用 \ 而不是 -)标志来生成 32 位可执行文件。但是,在 Windows 上,您需要不同的标志。您可以使用 '-V'(\V ..?) 标志查看可用的仿真标志,然后选择最佳候选并尝试。总而言之,它看起来像这样:'yasm some.asm -o some.o -f elf32' 和 'ld some.o -o some.bin -m elf_i386'。所以只要改变 elf32 & elf_i386
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 2011-09-04
    • 1970-01-01
    • 2011-09-08
    • 2016-03-31
    • 2018-10-01
    相关资源
    最近更新 更多