【第六节】windows汇编开发工具-RadAsm与Masm

一、介绍RadAsm和Masm相关概念

1.1 什么是Win32Asm?

        Win32Asm是一种基于32位汇编语言的编程语言,专门用于在Windows操作系统下进行开发。Win32Asm的全称是“Windows下的32位汇编语言编程”,它使用微软的MASM(Microsoft Macro Assembler)编译器来编译汇编代码。通过Win32Asm,开发者可以深入研究Windows操作系统的底层工作原理,追求高质量的执行效率和空间效率。此外,Win32Asm也是学习逆向工程和加密解密的重要工具。

        之前详细介绍了x86汇编的各种知识点,需要补充详细内容可以参考如下书籍:

参考学习书籍

  1. 《Intel汇编语言程序设计(第四版)》:Kip R. Irvine 著,温玉杰等译。

  2. 《80X86汇编语言程序设计教程》:杨季文等编著。

1.2 什么是RadAsm?

        RadAsm是一种类似于Visual C++(VC)和Visual Basic(VB)的集成开发环境(IDE),专门用于高效开发32位汇编应用程序。RadAsm的全称是“Rapid Application Development Assembler”,它提供了一种快速应用程序开发的环境,但不包括编译器。RadAsm的好处在于它提供了与VB、VC类似的项目管理方案,使得开发者能够更高效地进行汇编语言编程。

汇编开发环境的选择

除了RadAsm,还有其他几种常见的汇编开发环境:

  1. WinAsm Studio:专注于MASM32的开发环境,与RadAsm齐名,有些地方做得更好。

  2. EasyCode:与VB的开发环境极为相像,使用微软的MASM编译器。

  3. MasmPlus:由国内aogosoft站长开发,简单但不简陋,文本编辑功能强大,有较好的辅助功能。

        此外,还有一些有趣的汇编工具和框架,如面向对象编程的ObjAsm和高度封装的HLA(High Level Assembler)。

1.3 Masm32开发包

        Masm32开发包是使用微软发布的MASM编译器整理的一大堆头文件和库文件,并加入了一些工具组合而成的开发包。为什么要使用Masm32?因为99%的人都用它,其他编译器未能提供完整的头文件和库文件定义。最新发布的Masm32可以在Masm32官网找到。

        至此我们知道,RadAsm是集成开发工具,结合masm编译器共同开发编译运行x86汇编代码。当然,支持x86架构汇编代码的编译器还有其他的,但在这篇文章,我们主要使用RadAsm开发集成环境和Masm编译器完成x86汇编开发测试流程。接下来是他们的安装和使用教程。

二、 RadAsm与Masm32的安装流程

2.1、下载并解压所有需要的工具

下载RadAsm的IDE包或已配置好的完整包。

下载地址: http://www.assembly.com.br/  

如下截图位置下载完整包

如下位置下载语言支持文件(如MASM、TASM)。

下载masm32v11r 开发包。

下载地址: http://www.masm32.com/

点击上面截图位置下载即可。

全部下载完毕,我们各自解压到各自目录如下:

2.2、添加语言支持文件

        解压完毕后,我们先进入RadASM文件夹,管理员运行RadASM.exe

        打开后,在File栏,新建工程new project 发现只有html 类型,但是并没有masm类型。

        由此我们要把下载好的语言支持文件masm添加进来。首先我们进入下载解压好的Assembly文件夹根目录

        把如上文件都拷贝到解压后的RadASM文件夹下,如果提示覆盖其他文件,选择跳过就行。(最好记得这样操作)

        然后我们关闭RadASM.exe,然后再重新打开RadASM.exe。在Option项中,点击Programming Languages,按如下点击...添加masm.ini,并置顶即可。

然后我们new project 发现就有masm工程类型了

2.3、安装masm32v11r

        进入如下masm32v11r 文件夹,管理员权限运行install.exe,运行后出现下面运行截图,点击Install继续安装进程。

选择安装盘符

本机器安装到其他盘,提示失败,选择C盘系统盘就没问题,后面一直点击确定ok就行。

下面的是安装 masm 创建示例程序

        下面进度一直点确定即可

完成后会提示你是否创建masm自带的文本编辑器,可以点击yes

完成后会打开masm介绍

将上面程序关闭即可。

2.4、设置编译器MASM32路径

        重新打开RadASM.exe,选择Option项,再点Paths Setup,如下设置MASM32路径及其他路径

        其中app路径是安装后的masm32编译器的根目录,Include代表依赖的头文件,Library代表的是依赖的库,Macro是宏定义,Projects是默认创建的工程保存路径。$R表示的路径如下图

配置完后,我们再创建新工程就能看见工程的默认目录是自己设置的目录位置

2.5、测试开发环境

        下面我们接着弄一个测试demo,运行看看能不能跑起来,如下新建工程,填好工程名称,工程描述,工程保存位置

其他默认下一步

        点击finish后,看最右边是工程程序整个结构,其中testDemo.Asm是汇编代码文件,包含汇编语言代码,用于定义程序的逻辑和功能。 testDemo.Inc是头文件,包含宏定义、常量定义、函数声明等,用于在多个汇编文件之间共享代码和数据。 testDemo.dlg是对话框模板文件,定义对话框的布局和控件,通常用于资源文件中。 testDemo.Rc是资源脚本文件,定义程序的资源,如对话框、菜单、图标、字符串表等。

上图功能栏三个箭头所指功能分别是程序代码的编译,构建,运行按钮。

点击编译后如下表示成功

如下表示构建成功 

如下运行成功,弹出一个对话框,标题为 testDemo

        至此,测试程序成功运行完毕,即可验证开发环境是否安装配置成功!接下来我们用RadAsm开发工具开始自己愉快的汇编代码之旅吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/468787.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EHOME视频平台EasyCVR视频融合平台支持哪些摄像机接入?监控摄像头镜头的种类有哪些?

在现代安防监控领域,视频融合平台扮演着至关重要的角色,它们不仅能够整合不同品牌和型号的摄像机,还能提供稳定可靠的视频流传输和高效的视频管理功能。EasyCVR视频融合平台以其卓越的兼容性和灵活性,逐渐成为构建复杂监控网络的首…

从pg_depend和pg_class开始了解MogDB/openGauss/postgresql的系统元数据设计

前言 学习任何一种数据库,必须要了解它的数据字典,这样有利于了解数据库的结构、解读部分日志、定位一些问题。PG/OG系数据库的系统元数据遵从一个统一的设计规则,可以让初学者快速入门。本文以MogDB为例,剖析一下PG/OG系数据库的…

[译] APT分析报告:13.Trellix对Iran网络空间能力评估

这是作者新开的一个专栏,主要翻译国外知名安全厂商的技术报告和安全技术,了解它们的前沿技术,学习它们威胁溯源和恶意代码分析的方法,希望对您有所帮助。当然,由于作者英语有限,会借助LLM进行校验和润色&am…

vue2,vue3,uniapp,小程序实现前端url生成二维码

最近遇到一个项目,api返回url地址,前端通过地址生成二维码。 话不多说直接上代码,亲测有效,希望能帮助大家,同时如果有更好的方法希望大家能够分享 1、第一步,在项目的utils文件夹下面创建一个weapp-qrco…

Python的函数(补充浅拷贝和深拷贝)

一、定义 函数的定义:实现【特定功能】的代码块。 形参:函数定义时的参数,没有实际意义 实参:函数调用/使用时的参数,有实际意义 函数的作用: 简化代码提高代码重用性便于维护和修改提高代码的可扩展性…

FPGA学习笔记#4 Vitis HLS 入门的第一个工程

本笔记使用的Vitis HLS版本为2022.2,在windows11下运行,仿真part为xcku15p_CIV-ffva1156-2LV-e,这一篇终于没有再大量使用别人的内容,是我自己从头捋到尾的结果,不过之后的笔记还是要参照别人的教程就是了。 学习笔记&…

Linux中给普通账户一次性提权

我在以前文章中Linux常见指令大全(必要知识点)-CSDN博客 写过sudo的概念与用法。其实本质就是提权用的但是在某些场景下就算提权了也不能使用。 例如:打开主工作目录 他不相信你这个用户,虽然你是erman 解决方法 使用root账号打开…

A027-基于Spring Boot的农事管理系统

🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…

linux命令详解,存储管理相关

存储管理 一、内存使用量,free free 命令是一个用于显示系统中物理内存(RAM)和交换空间(swap)使用情况的工具 free -m free -m -s 5参数 -b 功能: 以字节(bytes)为单位显示内存使用情况。说…

关于若依500验证码问题的求助

关于若依框架中验证码出现500错误的问题,这通常表示服务器内部错误。以下是一些可能的原因及解决方案: 一、配置文件问题 .env.production文件: 确保.env.production文件中的VUE_APP_BASE_API已经修改成服务器上的域名地址,而不…

HashMap(深入源码追踪)

一篇让你搞懂HashMap的几个最重要的知识点,往源码跟踪可以让我们很轻松应对所谓的一些八股面试题. 一. 属性解释 先来解释HashMap中重要的常量属性值 DEFAULT_INITIAL_CAPACITY : 默认初始化容量,也就是如果不指定初始化的Map存储容量大小,默认生成一个存储16个空间的Map集合…

2024年第四届“网鼎杯”网络安全比赛---朱雀组Crypto- WriteUp

2024年第四届“网鼎杯”网络安全比赛---朱雀组Crypto-WriteUp Crypto:Crypto-2:Crypto-3: 前言:本次比赛已经结束,用于赛后复现,欢迎大家交流学习! Crypto: Crypto-2: …

【代码随想录day22】【C++复健】77. 组合;216.组合总和III; 17.电话号码的字母组合

77. 组合 这题做完之后还是有一种稀里糊涂的感觉。思考了半天什么范围合理,并且怎么设置才能让这个范围合理,然而一看答案,发现答案完全没考虑这些因素,直接暴力全遍历了。只能说确实这样能够放弃思考,比较省心一些.…

solidworks默认模板无效/打开step文件为空白 不显示模型

①打开step文件时如下提示: 是由于sw模版没有设置好 解决方法: 把零件和装配体模版选一下,gb_part和gb_assembly 再打开文件就不会有提示了。 ②打开step文件为空白 不显示模型 文件未损坏且sw版本正确情况下, 首先尝试按F&…

easyexcel实现自定义的策略类, 最后追加错误提示列, 自适应列宽,自动合并重复单元格, 美化表头

easyexcel实现自定义的策略类, 最后追加错误提示列, 自适应列宽,自动合并重复单元格, 美化表头 原版表头和表体字体美化自动拼接错误提示列自适应宽度自动合并单元格使用Easyexcel使用poi导出 在后台管理开发的工作中,离不开的就是导出excel了. 如果是简单的导出, 直接easyexce…

微深节能 煤码头自动化翻堆及取料集控系统 格雷母线

一、系统概述 微深节能在煤码头自动化翻堆及取料集控系统中引入了格雷母线高精度位移测量系统,该系统是一项重要的技术创新,显著提升了煤码头作业的自动化水平和精确性。它主要用于实现对斗轮堆取料机等大型机械设备的精准定位和自动化控制,从…

LeetCode 热题100 之 栈

1.有效的括号 思路分析&#xff1a;我们可以使用栈&#xff08;stack&#xff09;来解决这个问题。栈是一种先进后出的数据结构&#xff0c;这与括号匹配的需求非常契合。 unordered_map<char, char> bracket_map&#xff1a;这个哈希表用来存储右括号与左括号的对应关系…

yolov11-seg数据集制作训练推理流程:

文章目录 前言一、数据集制作二、模型训练推理&#xff1a; 前言 随着深度学习技术的不断发展&#xff0c;目标检测与分割技术在计算机视觉领域扮演着越来越重要的角色。YOLO&#xff08;You Only Look Once&#xff09;作为一种高效、实时的目标检测算法&#xff0c;自提出以…

基于Spring Boot的乡政府管理系统设计与实现,LW+源码+讲解

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装乡政府管理系统软件来发挥其高效地信息处理的作用&#xf…

python的学习

0.tips 1.变量命名规则 2.变量的赋值 3.变量的类型 int&#xff0c;float&#xff0c;str&#xff08;双引号、单引号、三引号包含都可以&#xff09; 类型带来的意义 动态类型的基本特性 4.注释 5.控制台 格式化字符串f-string 输入/输出input 6.运算符 算术运算符 //&…