【问题标题】:How can I have masm to generate just machine code?我怎样才能让 masm 只生成机器代码?
【发布时间】:2012-12-24 11:39:24
【问题描述】:

nasm 只能通过-f bin 选项生成机器码。我想在 masm 上做同样的事情,但我找不到方法。

看起来生成的目标代码总是 COFF 格式,似乎不是关闭它的选项。

有什么建议吗?

【问题讨论】:

  • 你不会使用链接器来生成可执行文件吗?
  • 如果你有足够的决心,你可以用螺丝刀敲钉子。更容易为手头的工作使用更合适的工具!反对 Nasm 的理由是什么?或者Masm有什么优势?有关您需要做什么的更多信息可能会帮助我们帮助您...
  • @BoPersson:是的,我不想用 asm 创建任何可执行文件。我要生成的是一块嵌入其他可执行文件的本机代码。
  • @FrankKotler:如上所述,我正在尝试生成一块本机代码以嵌入到另一个可执行文件中。包含可执行文件的构建系统基于 VC++,这就是为什么我要用 masm 组装我的代码。如果 masm 没有这样的选项,我确定我可以在 win32 上使用 nasm。

标签: assembly nasm masm


【解决方案1】:

MASM 必须使用链接器,但仍然可以使用/TINY 选项跳过创建可执行文件头。请参阅有关创建 COM 可执行文件的 MS 信息 - 这是一个平面二进制文件:

http://support.microsoft.com/kb/24954

正如其他人已经说过的,限制较少的工具。 FASM 是我的偏好——默认生成平面二进制文件。 :)

【讨论】:

  • 如果真的可用,这将是最好的解决方案,但我正在使用的 masm 版本(11.00.51106.1)无法识别该选项。
  • .MODEL 指令完成同样的事情。 msdn.microsoft.com/en-us/library/ss9fh0d6(v=vs.80).aspx我使用 MASM 已经有几年了,但该文档看起来是最新的。
【解决方案2】:

你不能。但是,如果您的目标只是将一个二进制块写入文件,您很容易滥用汇编程序来帮助您。

用两部分编写你的汇编程序

  • 您想要生成为二进制块的部分。给它一个开始标签 BLOCK 和结束标签 BLOCKEND。

  • 在加载可执行文件时获得控制权并在操作系统(例如 Windows)上调用以将块写入文件的部分;完成后,它只是退出。执行此操作的实际调用实际上并不难编写。在本节中,您可能会有 50-100 行代码。

【讨论】:

  • 谢谢。您的解决方案看起来不错,但我决定简单地从 COFF 格式中裁剪出该部分。
【解决方案3】:

你可以把你的masm代码变成一个exe文件,然后用十六进制编辑器来查看机器码

【讨论】:

  • 是的,如果我是汇编程序,我会写出我看到的内容;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 2012-10-04
  • 2019-02-26
  • 1970-01-01
  • 1970-01-01
  • 2021-02-26
  • 2012-10-12
相关资源
最近更新 更多