汇编学习笔记(7)-NASM环境搭建(nasm with vs2017)

前言

  前面已经提到了为什么从MASM转到NASM,并且也简单的介绍了一下MASM和NASM在伪指令和程序结构上的差异,现在就来搭建一下NASM的编译、开发、调试环境吧。

  参考资料:

http://blog.csdn.net/duweix/article/details/19911967

http://blog.csdn.net/cashey1991/article/details/6773927

http://www.mouseos.com/assembly/nasm02.html

http://www.linuxidc.com/Linux/2013-01/78271.htm

WINDOWS

  nasm的安装配置

    nasm的安装包可以在nasm的官方网站下载到最新的版本,注意安装的时候最好是右键管理员安装。

    这之后你可以在CMD中输入 nasm -v 查看nasm的版本,我安装完之后nasm命令是未识别的,所以我手动添加了一下环境变量(如何添加环境变量请自行百度)

    环境变量配置正确之后在cmd中输入 nasm -v  就可以看到nasm 显示了它的版本信息。

  这个时候已经可以使用nasm直接编译汇编代码的,如果只是想编译二进制的代码那么其实这个时候环境搭建就完成了,但是纯二进制的代码在windows 10 上运行调试都很麻烦的。我能想到的一个办法就是以前提到过的,装个虚拟机用磁盘工具写到引导扇区,开机直接运行但是这样调试困难。

  所以还是编译成exe在windows上直接运行吧,这样就可以借助各种调试工具了。但是编译成exe其实也有一个麻烦的地方就是好多中断不能使用, 以后CPU的内存管理啊,cpu的模式切换等等都没法使用,并且屏幕输出很麻烦。但是没关系,先编译成exe把程序逻辑调好,其他的只是接口的调用而已很方便集成的。

    nasm可以通过 -f 指令指定要汇编的目标平台,可以使用 nasm -hf 查看支持的平台模式,默认是纯二进制的

    所以你要编译纯二进制的文件的话,只需使用如下命令

    nasm xx.asm

    windows 32 为进程

    nasm -f win32 helloworld.asm     

    windows 64 为进程

    nasm -f win64 helloworld.asm 

  

  visual stdio的安装

    没办法啊要编译windows的应用vs是躲不过去的, 我安装的是最新的vs2017.怎么装请自行百度咯。

  编译调试

    如何编译成exe参考 http://blog.csdn.net/duweix/article/details/19911967

    主要是两条命令

    1. 先将asm变成.obj文件

      nasm -f win32 helloworld.asm

    2. 将obj文件和c库链接成exe

      cl.exe helloworld.obj /link libcmt.lib

  链接博文z中的asm其实是调用了c的print函数在控制台输出了内容。博文中的示例汇编代码 我在公司的vs2008 环境下编译没问题,但是回家用vs2017就出现了找不到链接地址的情况。不知道是不是库不对。反正我没细究。不用print就是。

  

  编译成的exe怎么调试呢?当然使用vs2017啦,当然也可以用windbg,厉害一点的用IDA也是可以的,反正就是各种反汇编调试工具。应为我们本来就是写的汇编,反汇编出来的结果和我们写的代码是一模一样的,所以调试很方便。

    这里说一下vs2017具体的调试步骤

    文件 =》打开 =》 项目

    

    直接打开exe

    

    如下图

    

    然后右键 =》调试=》 单步调试

    

    他可能会提示你没找到PDB文件或者没有源代码什么什么的,没关系按确定,然后把反汇编窗口显示出来

    

    你也可以把寄存器窗口显示出现,这样就能看到寄存器的变化。

    

    注意一点: 调试一开始可能不是停在了你汇编开始的位置,而是停在了C库的某个位置,这个时候你  F10 运行几步就会到你代码的开始位置了。

   nasm with vs2017

    前面的步骤已经可是开发编译调试了,但是你写汇编可能用一个文本编辑器 ,编译链接手动敲命令,vs只有在调试的时候才用到太可惜了。

    接下来就是我自己摸索出来的在vs2017集成环境中开发编译调试汇编程序。

    1. 新建一个 C++ 空项目

    2. 右键属性 =》常规 =》配置项目改成 生成文件

      

    3. 然后选择NMake标签 生成命令写上nmake,没错就是利用了windows的nmake工具,windows的nmake和linux下的make是一样的东西,所以同样也需要一个makefile

      

    4. 新建一个makefile文件,内容如下

# 目标程序的名称,就是定义各一个宏定义,用来指定程序的名字,所以这个 hello.exe 是可以任意替换的,所编写啥
EXE = hello.exe
# 需要用到的模块 这也是定义个一个宏变量OBJS, hello.obj 实际指的是 hello.asm 汇编文件# 所以如果你的汇编文件叫 helloword.asm 你就写 helloword.obj# 如果你的程序需要多个汇编文件也是支持的名字用空格隔开即可,也可以用 \ 表示换行,比如#OBJ = hello.obj\#     print.obj\#     input.objOBJS = hello.obj

#编译的平台32?64FORMAT = win32

# 链接命令, 就是链接上面所指定的所有的obj,这个不用改
$(EXE) :$(OBJS)
    cd Debug
    cl.exe $(OBJS) /link libcmt.lib

# 编译.asm成.obj,这是指定obj由asm编译而来,并是哟个下边的编译指令,所以可以看出我这里编译的都是32位的
.asm.obj:
    nasm -f $(FORMAT) $< -o Debug\$*.obj #清除临时文件 clean : del*.obj

    具体makefile的语法规则可参考前言中给出的链接,上面这个是我研究了好久好不容易写出来的makefile,当然也只是研究了个皮毛出来而已。大家将就着试试。

    5. 接下来就可以按F5运行调试,记得打开 反汇编窗口和寄存器窗口。

    

    这是我写的一个例子: https://files.cnblogs.com/files/alwaysking/asm.zip

LINUX

    linux下没啥继承环境,所以基本就只有敲命令咯

    参考: http://www.linuxidc.com/Linux/2013-01/78271.htm

    1. 先将汇编文件编译成.o文件对应的就是windows下的.obj,注意linux32要要选择编译成 elf32格式 64位要选择编译成 elf64

      nasm -f elf32 hello.asm

    2. 使用GCC将.o文件编译成可执行文件

      gcc -o hello hello.o

    

    make是linux下的项目编译工具,我也简单的写了一个makefile文件    

# 目标名称EXE=hello
# 需要用到的模块 这也是定义个一个宏变量OBJS, hello.obj 实际指的是 hello.asm 汇编文件# 所以如果你的汇编文件叫 helloword.asm 你就写 helloword.obj# 如果你的程序需要多个汇编文件也是支持的名字用空格隔开即可,也可以用 \ 表示换行,比如
OBJS = hello.o 
#编译的平台32?64FORMAT = elf32
# 连接命令这个不用改All:$(OBJS) gcc -o $(EXE) 
# 编译对应的asm成.o文件,这个也不用改$(OBJS) $(OBJS): %.o: %.asm   nasm -f $(FORMAT) $< -o [email protected] 
# 清理操作.PHONY:clean clean:   rm -rf *.o Test @echo "Clean done!"

  

时间: 2024-10-10 04:31:37

汇编学习笔记(7)-NASM环境搭建(nasm with vs2017)的相关文章

Cocos2dx 学习笔记整理----开发环境搭建

最近在学习cocos2dx,预备将学习过程整理成笔记. 需要的工具和环境整理一下: 使用的版本 cocos2dx目前已经出到了v3.1.1,学习和项目的话还是用2.2.3为宜,毕竟不大想做小白鼠,并且学习了几天之后才发出3.X版本的,版本内容变动比较大. 开发环境 1 jdk 1.6以上 2 python 2.7为宜(创建项目要用的) 3 NDT+Android SDK 4 Cygwin或者MinGW 开发工具 1 Eclipse + CDT + ADT 2 VS2010 3 Sublime T

Hadoop学习笔记(3)——分布式环境搭建

Hadoop学习笔记(3) ——分布式环境搭建 前面,我们已经在单机上把Hadoop运行起来了,但我们知道Hadoop支持分布式的,而它的优点就是在分布上突出的,所以我们得搭个环境模拟一下. 在这里,我们采用这样的策略来模拟环境,我们使用3台ubuntu机器,1台为作主机(master),另外2台作为从机(slaver).同时,这台主机,我们就用第一章中搭建好的环境来. 我们采用与第一章中相似的步骤来操作: 运行环境搭建 在前面,我们知道,运行hadoop是在linux上运行的.所以我们单机就在

[java基础学习笔记]Java8SE开发环境搭建、第一个Java Hello World、Java程序的编译与执行

本文作者:sushengmiyan 本文地址:http://blog.csdn.net/sushengmiyan/article/details/25745945 主要内容: ---------------------------------------------------| 1.JDK的下载与安装                            | 2.编写第一个java程序HelloWorld     | 3.编译执行HelloWorld                      

oracle学习笔记1(环境搭建)

学习的开始先剧透一下,本人有点笨,本来想用oracle vbox,装个red hat+oracle,但是虚拟机一直报错,0x00000000内存不能written.所以便想到其他的办法,刚好接触了golang,然后就知道了docker这个伟大的项目,所以本环境使用docker来搭建.省去了一大部分时间可以直接开始Oracle的学习. 特此留下笔记,以供参考.... 工具:一共需要三个工具 docker-install.exe DockerToolbox-1.12.0.exe SecureCRT.

IBatis .NET 开发学习笔记&mdash;&mdash;.NET 开发环境搭建

大家好,今天给大家带来的是web应用程序配置,至于windows应用程序或者其他类型解决方案可以相同的配置,web应用程序配置文件为web.config,windows应用程序是app.config. 通过以下步骤可以建立属于你自己的环境: 1.首先,肯定是打开Visual Studio(文章后面简称VS),如果你有其他工具开发,我也不介意,反正我用VS,VS目前最新版是2013,不过我喜欢复古,所以,我目前用安装VS2010来当作教程,不管目前是多少版本了,都可以同理得到. 2.然后,新建一个

php学习笔记1--开发环境搭建:apache+php+mysql

php开发环境搭建:apache + php + mysql1.下载apache,php及mysql安装包2.安装apache:下载的apache若是.msi可直接双击,按指示一步一步安装:(若操作系统为win8则,不能通过双击安装.msi,需要以管理员身份运行cmd,在cmd中进入.msi安装包所在目录,然后运行该.msi文件方可安装)若是压缩包,则先解压然后以管理员身份运行cmd,在cmd中进入到apache解压后的目录,进入bin子目录,找到httpd.exe,在cmd中输入httpd -

Hadoop学习笔记—14.ZooKeeper环境搭建

从字面上来看,ZooKeeper表示动物园管理员,这是一个十分奇妙的名字,我们又想起了Hadoop生态系统中,许多项目的Logo都采用了动物,比如Hadoop采用了大象的形象,所以我们可以猜测ZooKeep就是对这些动物进行一些管理工作的. 一.ZooKeeper基础介绍 1.1 动物园也要保障安全 zookeeper是hadoop下面的一个子项目,用来协调跟hadoop相关的一些分布式的框架,如hadoop, hive, pig等, 其实他们都是动物,所以叫zookeeper ——“动物园管理

ODB学习笔记之基础环境搭建

一,简介 ODB是应用于C++的一个开源.跨平台.跨数据库的对象关系映射(ORM)系统. 它可以让你持久化C++对象到关系数据库,而不必处理表.列或者SQL,无需手动编写任何映射代码. ODB支持MySQL,SQLite,PostgreSQL,Oracle和微软SQL Server关系数据库以及C ++98/03和C ++11语言标准. 它还配备了用于Boost和Qt可选的配置文件,让你可以无缝地使用这些库持久化C++类的值类型.容器和智能指针. 它有易用性,简洁的代码,安全,数据库可移植性,优

angular2.0学习笔记1.开发环境搭建

开发环境, 1.安装Node.js®和npm, node 6.9.x 和 npm 3.x.x 以上的版本. 更老的版本可能会出现错误,更新的版本则没问题. 控制台窗口中运行命令 node -v 和 npm -v,来查看版本 2. 运行 npm config set registry https://registry.npm.taobao.org 因为国内访问http://npmjs.org(angular2.0组件库) 的站点访问经常不是很顺畅,所以换成淘宝的镜像, 3. 然后全局安装 Angu