迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 操作系统 >

如何编译汇编代码:在 Linux、Windows 中 使用 NASM

作者:迹忆客 最近更新:2023/02/07 浏览次数:

可以在 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 代替。

如果我们的入口点是 _startmain,则应将其更改为 _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 

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便