• HOME
  • CATEGORY
  • ABOUT ME
All Articles

  • HOME
  • CATEGORY
  • ABOUT ME

Nasm-Masm-Base-1

2022-11-16

本文主要说明 NASM 与 MASM 的搭建以及简单的编译使用(操作系统环境为 Win11)

nasm 与 masm 主要的区别(除语法外)

NASM MASM
平台 Linux、Mac、Windows Windows

实验所需要相关软件,及其下载地址

| 软件名称 | 版本号 | 用途 | 下载地址 |
| 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
mingw-get

1.4 安装 GCC、G++、GDB(本文只需要安装 GCC)

1
2
3
mingw-get install gcc
mingw-get install g++
mingw-get install gdb

1.5 查看 gcc 是否安装成功

1
gcc -v

2. 安装 NASM

2.1 下载 NASM 并安装

2.2 配置对应的 PATH 变量

2.3 查看是否安装成功

1
nasm -v

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

赏

谢谢你请我吃糖果

支付宝
微信
  • ASM
  • Reverse

扫一扫,分享到微信

微信分享二维码
Oracle-Linux-SqlPlus-Garbled-Code-1
Window-Cmd-Garbled-Code-Resolution-1
© 2025 Sevattal
这里只是一个微不足道的计算机从业者
  • All Articles

tag:

  • Ansible
  • JMeter
  • CRM
  • Mail
  • Conda
  • Corosync-Pacemaker-CRM
  • DM Database
  • Scrapy
  • Cloud
  • ASM
  • Mysql
  • Linux
  • Elasticsearch
  • FFmpeg
  • Hexo
  • RabbitMQ
  • SpringBoot
  • Spring
  • Maven
  • Kubernetes
  • Lightroom
  • Crontab
  • DRBD
  • LVM
  • Nginx
  • NTP
  • OpenSSH
  • SSH
  • NetworkCard
  • Supervisor
  • Swap
  • TinyProxy
  • GCC
  • VNC
  • Oracle
  • MongDB
  • MinIO
  • Mysql-Lock
  • Restore
  • MysqlDump
  • Procedure
  • HTML
  • XtraBackup
  • Nacos
  • Neo4j
  • Netty
  • NAT
  • Route
  • ACL
  • EIGRP
  • Cisco
  • OSPF
  • HUAWEI
  • Switch
  • STP
  • VLAN
  • VTP
  • Nmap
  • OpenFeign
  • Sentinel
  • Backup
  • EXP
  • RMAN
  • DG
  • FlashBack
  • Job
  • Oracle-Inspection
  • Oracle-Name
  • Oracle RAC
  • RAC
  • Trigger
  • Postgres
  • Postgres-Copy
  • Flask-SQLalchemy
  • PGPool-II
  • Postgres+PGPool-II
  • Rancher
  • Redis
  • Redis-Copy
  • Redis-Cluster
  • Redis-Memory
  • Redis-RDB
  • Redis-AOF
  • Redis-Sentinel
  • Interview
  • SNMP
  • Spring Security
  • Bus
  • Config
  • Consul
  • GateWay
  • Eureka
  • Sleuth
  • Stream
  • Zookeeper
  • Tomcat
  • VMware
  • ShareDisk
  • Video-Clip
  • Hystrix
  • Ribbon
  • Regedit
  • USB
  • Yaml
  • Zabbix

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true