如何编译汇编代码:在 Linux、Windows 中 使用 NASM
可以在 Linux 或 Windows 上使用 NASM 编译汇编程序,因为 NASM 可用于这两个平台。 NASM 汇编程序将使用助记符将低端编码转换为处理器可以理解的机器语言。 本文不会教大家使用 NASM 进行编程,而是教大家从 NASM 源代码创建适用于 Linux 和 Windows 的可执行命令。
Netwide Assembler (NASM) 是 Intel x86 架构的汇编器和反汇编器,通常用于创建 16 位、32 位 (IA-32) 和 64 位 (x86-64) 程序。
如何使用 NASM for Linux 编译汇编程序?
创建源文件
我们可以使用任何文本编辑器(例如 Gedit、KWrite 或 XEmacs)来执行此操作。 保存文件时,将其扩展名为 .asm。
编译源文件
对于此步骤,我们需要在计算机上安装 NASM 软件。
如果我们运行的是 Debian 或 Ubuntu,只需键入以下命令:
$ sudo apt-get install nasm
如果我们有其他 Linux 发行版,则必须使用我们的发行版的包管理器(例如 Urpmi、Yum、Emerge)或从官方网站下载 NASM。
使用以下命令行来编译源文件:
$ nasm -f elf test.asm
在示例中,保存的 .asm 文件称为 test.asm。 这将在当前目录中创建一个名为 test.o 的文件。
注意
该文件不可执行。 它仍然是一个目标文件。
创建可执行文件
现在我们有了我们的目标文件,名为 test.o,我们必须创建我们的可执行文件。
我们的程序可能以名为 _start
的过程开始。 这意味着我们的程序有自己的入口点,无需使用 main
函数。 但是,我们需要使用“l”来创建可执行文件:
$ ld test.o -o test
或者,我们的程序可以从称为 main
的过程开始。 我们将需要使用 gcc
来创建我们的可执行文件:
$ gcc test.o -o test
现在,我们的可执行文件已创建、测试并位于当前目录中。
程序执行
要运行名为 test 的程序,只需键入以下命令:
$ ./test
如何使用 NASM for Windows 编译汇编程序?
Windows下没有 main
函数,必须用 WinMain 代替。
如果我们的入口点是 _start
或 main
,则应将其更改为 _WinMain @ 16
。此外,将过程末尾的 ret 更改为 ret 16:
section .text
global _WinMain@16
_WinMain@16:
mov eax, 0
ret 16
安装软件
我们必须先安装 NASM。 将安装包保存在某处,因为稍后会用到。
最困难的一步是安装 MinGW,它是 Windows 的免费开发环境:
首先从他们的网站上选择最新版本的 MingGW。 运行安装程序,但此时不要更新。 保留默认选中的所有选项,并等待它安装。
现在你需要在开发环境 MinGW 中插入 NASM。 解压 NASM 档案。 我们应该得到一个文件夹,其中包含一个名为 nasm.exe 的文件。 将此文件复制到目录 C:\MinGW\bin 中。
创建源文件
与 Linux 一样,不需要使用特定的发布者来为 NASM 创建源文件。 我们可以使用记事本。 但请注意,它倾向于将 .txt 扩展名添加到它创建的文件中。 为消除任何歧义,建议大家查看文件的扩展名。
无论如何,避免使用文字处理器,例如 Word 或 WordPad。
如果愿意,我们还可以使用使用 NASM 语法的编辑器,例如 NasmEdit IDE。
确保使用 .asm 扩展名保存源文件。
编译源文件
通过转到“开始”>“运行”并键入 cmd.exe 打开“命令”窗口
使用命令 cd,转到包含源文件的文件夹。 进入此目录后,使用以下命令组装源文件 (test.asm):
> nasm -f win32 test.asm -o test.o
我们现在已经创建了一个目标文件。 下一步将把它变成一个可执行文件。
程序的创建和执行
在命令窗口中,键入最终命令以创建可执行文件:
> ld test.o -o test.exe
相关文章
在 Linux 中安装 MySQL 客户端
发布时间:2023/05/09 浏览次数:72 分类:MySQL
-
在 Linux 中安装 MySQL 客户端的命令。Linux 和 Unix 等环境作为命令行界面工作,仅在命令的帮助下运行。
在 Linux 中更新 YUM
发布时间:2023/05/04 浏览次数:82 分类:操作系统
-
本文介绍了 Linux 中的 yum update 命令。本文将教我们如何在 Linux 中更新 YUM,以及如何在 Linux 系统上安装、更新、删除、查找和管理包。
在 Linux 中安装 Deb 文件
发布时间:2023/05/04 浏览次数:130 分类:操作系统
-
本文介绍如何在 Linux 中安装 deb 文件。在这篇 Linux 文章中,我们将学习如何在 Linux 系统上安装 .deb(Debian 软件包)文件。 我们还将看到如何在安装后删除 .deb 文件。
Linux 中的 lsof 命令
发布时间:2023/05/04 浏览次数:82 分类:操作系统
-
在这篇 Linux 文章中,我们将了解 Linux 操作系统中的 lsof 命令。 我们将看到如何在 Linux 中将此命令用于不同目的。
Linux 解决不能执行二进制文件问题
发布时间:2023/05/04 浏览次数:187 分类:操作系统
-
在本文中,我们将学习如何在 Linux 中执行二进制文件。 如果 Linux 无法执行二进制文件,我们还将学习如何解决错误。
Linux 中错误 Mesg: Ttyname Failed: Inappropriate Ioctl for Device Error
发布时间:2023/05/04 浏览次数:145 分类:操作系统
-
本文介绍如何在 Linux 中解决 mesg: ttyname failed: inappropriate ioctl for device 错误。在 Linux 中,这个错误是由于默认的 vagrant 配置 config.ssh.shell 与 bash -l 交互导致的。
Linux 中的 ps aux 命令
发布时间:2023/05/04 浏览次数:69 分类:操作系统
-
本篇文章将讨论 Linux 中的 ps aux 命令。如果将 aux 快捷方式与 ps 命令一起使用,它将显示用户需要的最多信息,并可以为您提供系统运行进程的当前状态。
Linux 中的 NTP
发布时间:2023/05/04 浏览次数:137 分类:操作系统
-
本篇文章将讨论 Linux 中的 ntp。NTP 是大多数 IT 基础设施使用的核心协议。 使用它的目的是同步日期和时间信息。
在 Linux 中计算文件中的唯一行
发布时间:2023/05/04 浏览次数:70 分类:操作系统
-
计算文件中的唯一行是 Linux 中的一项常见任务,可以使用多种不同的工具和方法来执行此操作。使用 sort 和 uniq 命令计算文件中的唯一行数