masm32链接器不会创建可执行文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了masm32链接器不会创建可执行文件相关的知识,希望对你有一定的参考价值。

我在我的Windows XP SP3机器上安装了masm32。我从这里下载了masm32:

http://www.masm32.com/masmdl.htm

安装好了。我将路径C: masm32 bin添加到PATH环境变量中。现在,我正在尝试组装和链接示例程序。它创建目标文件但不创建可执行文件。

示例程序:

include masm32includemasm32rt.inc 

.data
MyTitle db "ASM!",0
MyText db "Some Text!",0

.code
start:
push 0
push offset MyTitle
push offset MyText
push 0
call MessageBoxA
call ExitProcess
end start

另请注意,c: masm32 bin目录中存在的默认link.exe文件在链接时抛出错误,如下所示:

 Assembling: sample.asm

***********
ASCII build
***********

Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

/z2
"sample.obj+"
"sample.obj"
"sample.exe"
NUL
LINK : warning LNK4044: unrecognized option "z2"; ignored
LINK : fatal error LNK1181: cannot open input file "sample.obj+"

我从这里得到了另一个版本的link.exe:

http://download.microsoft.com/download/vc15/Update/1/WIN98/EN-US/Lnk563.exe

当我使用以下命令汇编和链接时:

ml.exe sample.asm sample.obj

它给出了错误:

 Assembling: sample.asm

***********
ASCII build
***********


Microsoft (R) Segmented Executable Linker  Version 5.60.339 Dec  5 1994
Copyright (C) Microsoft Corp 1984-1993.  All rights reserved.

Object Modules [.obj]: sample.obj+
Object Modules [.obj]: "sample.obj"
Run File [sample.exe]: "sample.exe"
List File [nul.map]: NUL
Libraries [.lib]:
Definitions File [nul.def]:
LINK : fatal error L1104: masm32libmasm32.lib : not valid library
答案

好吧,你肯定不想使用Segmented链接器,这适用于16位代码。继续使用Incremental Linker Version 5.12.8078

那么,你得到一个obj文件?这就是ML.exe所做的。它是MASM汇编程序,它会将您的代码汇编到一个obj文件中,并传递给您选择的链接器以创建exe。我说你选择的链接器,因为有一些链接器你可以使用它们各有利弊。

要创建目标文件:ml /c /coff /Cp sample.asm

/c选项告诉ml仅汇编而不是尝试链接

/Cp选项告诉ml保留所有标识符的大小写

/coff以公共对象文件格式创建obj文件,这是我们在Windows上用于x86的内容。

现在,您需要将obj文件链接到exe:link /subsystem:windows sample.obj

/subsystem:windows创建了一个GUI Windows exe。更改为console以创建基于控制台的应用程序(与DOS应用程序不同)

以上是关于masm32链接器不会创建可执行文件的主要内容,如果未能解决你的问题,请参考以下文章

链接:致命错误 LNK1181:无法打开输入文件“zz.exe”

学习笔记 链接

链接器链接过程及相关概念解析

将 16 位实模式代码链接到符合 Multiboot 的 ELF 可执行文件时出现 LD 错误

Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段

MPLAB X32 编译器和将函数移动到 RAM 会导致链接器错误