'。'尝试运行汇编代码时无法识别?

时间:2020-09-11 02:39:16

标签: assembly nasm

我在汇编中编写了一些代码,并将.asm文件放入NASM文件夹

执行以下命令: nasm控制台中的nasm -f elf test.asmld test.o -o test

但是当我尝试执行./test来运行代码时, 我收到错误'.' is not recognized as an internal or external command, operable program or batch file.

我访问过的所有要弄清楚如何运行汇编代码的网站都说我应该做./thingy.asm,但是显然不起作用,所以我不知道该怎么做!

如果它可以帮助我的操作系统是Windows 10,并且我的NASM版本是2.15.05

1 个答案:

答案 0 :(得分:3)

'.' is not recognized as an internal or external command

背景信息

原因是Windows与Linux或Unix的工作方式不同(很明显,您的教程描述了如何使用Linux)

如果文件名以.exe结尾,则Windows会将文件识别为应用程序。如果文件名以.bat结尾,则Windows会将其识别为“批处理”文件。

在Linux或Unix下,这是完全不同的:应用程序或“批处理”(*)文件可以具有任何文件名;用特殊标志“标记”文件,该标志告诉操作系统可以执行该文件。如果设置了此标志,则操作系统使用文件内容(而不是文件名的后缀)来区分可执行文件的类型(例如,应用程序,“批处理”文件,Python程序...)。

命令行ld test.o -o test将生成一个名为test而不是test.exe的文件。在Linux下,这将是应用程序的有效文件名,在Windows下,该文件名必须以.exe结尾,因此这不是有效的文件名。

如果愿意,您可以在Linux下随意命名“批处理”文件test.exe和应用程序test.bat

在Linux下,命令./test将在当前目录中启动名为test的应用程序; ./test.exe将启动名为test.exe的应用程序或“批处理”文件。

在Windows下,用于执行名为test.exe的文件的命令将只是test,而不是./test.exe

关于您的问题

首先,您必须重命名输出文件:ld test.o -o test.exe

下一个问题是您的程序肯定无法在Windows上运行:

至少Windows 7(我不确定Windows 10)将拒绝启动不使用任何DLL文件的应用程序;然后命令行ld test.o -o test.exe生成一个不使用任何DLL文件的应用程序。

我很确定您的汇编程序包含int指令或syscall指令。

直接调用这些指令是特定于操作系统的:

调用int 0x80(或int 80hint $0x80(取决于所使用的汇编程序)的程序只能在Linux上运行!


(*)在Linux中,此文件类型名为“ shell脚本”,而不是“批处理文件”;但是,这主要是术语上的差异。