本文主要说明 NASM 与 MASM 的搭建以及简单的编译使用(操作系统环境为 Win11) nasm 与 masm 主要的区别(除语法外)
NASM
MASM
平台
Linux、Mac、Windows
Windows
注:NASM的语法与MASM的语法相互之间不能够通用
实验所需要相关软件,及其下载地址 | 软件名称 | 版本号 | 用途 | 下载地址 | | MinGW | | 用于在 Windows上安装 GCC | http://sourceforge.net/projects/mingw/files/ | | MASM32 | 11 | masm 编译工具 | http://www.masm32.com/download.htm | | NASM2.15 | | nasm 编译工具 | https://www.nasm.us/ | | NASM | | nasm 在线文档 | https://www.wikihow.com/Run-NASM-on-Windows |
1. 安装 MinGW 1.1 下载 MinGW 安装包 并 安装 MinGW (默认安装目录为你选定磁盘的 根下面的 MinGw )
1.2 配置 MinGW 系统环境变量
1.3 确认 MinGW 是否安装成功 进入 CMD 命令行输入
1.4 安装 GCC、G++、GDB(本文只需要安装 GCC) 1 2 3 mingw-get install gcc mingw-get install g++ mingw-get install gdb
注:gcc 安装的时间比较长
1.5 查看 gcc 是否安装成功
2. 安装 NASM 2.1 下载 NASM 并安装
2.2 配置对应的 PATH 变量
2.3 查看是否安装成功
3. MASM 安装 3.1 下载 MASM 并安装 (安装完成后默认路径:C:\masm32)
3.2 配置环境变量
3.3 查看 masm 是否安装成功
4. nasm 与 masm 的简单编译操作案例 obj 后缀的文件说明: 源程序经过编译程序编译后生成的,它不能直接执行,需要连接程序连接后才能生成可执行文件,这样就能值行了。
4.1 nasm 编译案例 源码案例
1 2 3 4 5 6 7 8 9 10 11 12 13 ; Hello World Program extern _printf SECTION .data msg db 'Hello World!', 0Ah ; assign msg variable with your message string SECTION .text global _main _main: push msg call _printf add esp, 4 ret
命令行编译操作
1 2 3 4 5 6 # 编译成二进制文件, -f win32 代表的是操作系统模式,自动会生成 test1.obj 文件 nasm -f win32 test1.asm # gcc 编译 (连接器生成可执行文件) gcc test1.obj -o test1 # 运行二进制代码 test1
4.2 masn 编译案例 源码案例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 .586 .MODEL flat, stdcall includelib C:\masm32\lib\user32.lib includelib C:\masm32\lib\kernel32.lib ExitProcess PROTO, dwExitCode :DWORD MessageBoxA PROTO hWnd : DWORD,lpText : BYTE,lpCaption : BYTE, uType : DWORD .data Number DWORD 0 text db "shellcode", 0 .code main proc mov eax,5 mov ebx,6 add eax,ebx add eax,Number push 0 push offset text push offset text push 0 call MessageBoxA add esp,16 call ExitProcess main ENDP END main
命令行编译操作 (之前版本的命令为 masm 命令,现在更改为了 ml 和 ml64 命令)
1 2 3 4 5 6 # 编译成二进制文件,自动会生成 test2.obj 文件 ml /c /coff test2.asm # 连接器生成可执行二进制文件,自动生成 test2.exe 文件,注意: 子系统参数需要添加否则会报错 link /subsystem:windows test2.obj # 执行二进制文件 test2.exe