'.'尝试 运行 汇编代码时无法识别?
'.' is not recognized when attempting to run assembly code?
我在汇编中做了一些代码,并将.asm文件放在NASM文件夹中
执行了以下命令:
nasm 控制台中的 nasm -f elf test.asm
和 ld test.o -o test
但是当我尝试对 运行 代码进行 ./test 时,
我收到错误 '.' is not recognized as an internal or external command, operable program or batch file.
我访问过的所有网站都是为了弄清楚如何 运行 汇编代码说我应该这样做 ./thingy.asm 但这显然不起作用所以我不知道该怎么做!
如果有帮助我的 OS 是 Windows 10,我的 NASM 版本是 2.15.05
'.' 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 80h
或 int [=32=]x80
取决于所使用的汇编程序)的程序将仅在 Linux 上 运行!
(*) 这种文件类型被命名为“shell脚本”,而不是Linux中的“批处理文件”;但是,这主要是术语上的差异。
我在汇编中做了一些代码,并将.asm文件放在NASM文件夹中
执行了以下命令:
nasm 控制台中的 nasm -f elf test.asm
和 ld test.o -o test
但是当我尝试对 运行 代码进行 ./test 时,
我收到错误 '.' is not recognized as an internal or external command, operable program or batch file.
我访问过的所有网站都是为了弄清楚如何 运行 汇编代码说我应该这样做 ./thingy.asm 但这显然不起作用所以我不知道该怎么做!
如果有帮助我的 OS 是 Windows 10,我的 NASM 版本是 2.15.05
'.' 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 80h
或 int [=32=]x80
取决于所使用的汇编程序)的程序将仅在 Linux 上 运行!
(*) 这种文件类型被命名为“shell脚本”,而不是Linux中的“批处理文件”;但是,这主要是术语上的差异。