
汇编
文章平均质量分 79
WolvenSec
这个作者很懒,什么都没留下…
展开
-
汇编:Linux汇编基本框架与系统调用
在Linux操作系统下进行汇编编程时,基本的汇编程序框架通常包括以下几个部分:①:定义数据段、代码段等。②:程序的执行起点,通常为_start或main。③:通过操作系统提供的接口完成基本功能,如输入输出。原创 2024-06-16 00:51:39 · 1431 阅读 · 0 评论 -
汇编:内联汇编和混合编程
在C++开发中,运行库(Runtime Library)是执行程序时所依赖的库,它提供了标准C和C++函数的实现,如输入输出、内存管理等。C/C++ 内联汇编(Inline Assembly)是一种在C或C++代码中嵌入汇编语言指令的方法,以便在不离开C/C++环境的情况下利用汇编语言的优势进行性能优化或执行特定的硬件操作。代码示例展示了在C++程序中使用内联汇编来调用一个C++函数,并将结果存储在一个全局变量中,这种方法展示了如何在内联汇编中传递参数并调用C++函数。指令从函数返回,将控制转移回调用点。原创 2024-06-15 00:49:38 · 921 阅读 · 0 评论 -
x64汇编fastcall调用约定
x64汇编环境:只需要在x86基础上对项目属性进行设置,将平台设置为所有平台;以及在将debug改为x64模式即可:后续写完代码直接生成项目再使用本地调试器进行运行即可。原创 2024-06-14 00:14:46 · 1630 阅读 · 0 评论 -
汇编:EFLAGS寄存器
// 定义EFLAGS寄存器的位域结构体// 保留位// 保留位// 保留位// 保留位// ID Flag// 保留位} EFLAGS;// 通过联合体将EFLAGS寄存器的值和位域结构体关联。原创 2024-06-13 00:30:36 · 1951 阅读 · 0 评论 -
汇编:保护模式下的寻址方式
寻址(Addressing)是计算机在访问内存时定位数据的过程;它涉及如何指定内存位置,以便处理器能够正确地读取和写入数据,不同的计算机架构和操作模式支持多种不同的寻址方式。原创 2024-06-12 00:04:21 · 716 阅读 · 0 评论 -
汇编:masm伪指令
这段32位汇编代码使用了MASM语法,并结合了标准C库函数printf和scanf来实现一个简单的控制台程序。该程序提示用户输入一个数字,并根据输入的数字进行条件判断,然后输出相应的结果。.586;导入头文件和库文件;声明C标准函数.data.code;自定义过程-打印字符串push eaxadd esp,8ret;自定义过程-打印整数push eaxpush eaxadd esp,8retmain proc;打印Tips;调用scanf函数。原创 2024-06-11 00:15:55 · 1884 阅读 · 0 评论 -
汇编:结构体
更多成员...: 结构体的名称。: 结构体成员的名称。TYPE: 成员的数据类型,如BYTEWORDDWORDDBDWDD等。: 可选,成员的元素个数,用于定义数组。: 可选,成员的初始值。nAge dd?在这个示例中,Personname: 一个32字节的字符数组,用于存储人的姓名。age: 一个32位的整数,用于存储人的年龄。: 定义了一个名为Person的结构体。: 一个32字节的字符数组,用于存储姓名。nAge dd?: 一个32位的整数,用于存储年龄。: 结束结构体定义。: 定义一个名为。原创 2024-06-10 00:48:38 · 769 阅读 · 0 评论 -
汇编:宏的使用
EQU指令用于定义一个符号常量,语法如下指令也可以用来定义符号常量,但它通常用于变量初始化。宏的定义通常使用MACRO关键字,并且可以包含参数。;宏体:可以是任意的汇编指令;使用参数 param1, param2, ...ENDM。原创 2024-06-09 00:40:02 · 1153 阅读 · 0 评论 -
汇编:头文件
汇编头文件(header files)在汇编语言编程中类似于高层语言中的头文件,它们通常包含宏定义、常量定义、数据结构定义、函数声明以及其他在多个汇编源文件中共享的代码;使用头文件可以提高代码的可维护性和可读性,并使代码更加模块化,最常见的汇编头文件扩展名.inc,表示包含文件(include file)。原创 2024-06-08 12:54:20 · 2259 阅读 · 0 评论 -
汇编:数组数据传送
要在32位汇编中实现数组数据的传送,可以使用字符串操作指令MOVS以及其前缀REP,可以高效地复制数组数据。MOVS指令是一种字符串操作指令,用于将数据从源地址移动到目标地址。MOVS指令有不同的变种,可以处理不同大小的数据:字节(MOVSB)、字(MOVSW)、双字(MOVSD)和64位模式下的四字(MOVSQ。原创 2024-06-07 00:21:30 · 885 阅读 · 0 评论 -
汇编:数组-寻址&取数据
比例因子寻址(也称为比例缩放索引寻址或基址加变址加比例因子寻址)是一种复杂的内存寻址方式,常用于数组和指针操作。它允许通过一个基址寄存器、一个变址寄存器和一个比例因子来计算内存地址。原创 2024-06-05 13:59:29 · 969 阅读 · 0 评论 -
汇编:数组定义&数据填充
在32位汇编语言中,定义数组时,通常使用定义数据指令(如DBDWDDDQ)和标签来指定数组的名称和内容。DB定义字节数组(每个元素占1字节)、DW定义字数组(每个元素占2字节)、DD定义双字数组(每个元素占4字节)、DQ.data定义一个包含5个字节(8位)的数组定义一个包含5个字(16位)的数组定义四字数组数组名 命令 元素个数 dup(?这个时候如果要手动对数组进行修改或者初始化则需要使用stos系列的指令;STOS指令在 x86 汇编语言中用于将数据从累加器寄存器(ALAX或EAX。原创 2024-06-04 00:31:02 · 1443 阅读 · 0 评论 -
汇编:调用Win32 API
在32位汇编程序中使用 Win32 API 是很常见的,特别是在开发 Windows 应用程序时调用的频率很高,Win32 API 提供了访问 Windows 操作系统功能的接口,包括窗口、消息处理、文件操作、网络通信等等。调用 Win32 API 函数:使用适当的调用约定(例如 stdcall)来调用 Win32 API 函数,并正确传递参数。声明外部函数:声明要调用的 Win32 API 函数,以便汇编器知道函数的名称和参数类型。:这两行代码定义了字符串,用于作为消息框的文本和标题。原创 2024-06-01 16:23:57 · 828 阅读 · 0 评论 -
汇编:调用C函数
在32位汇编程序中可以调用C函数;这种做法在很多情况下是有用的,尤其是在汇编程序需要与C代码进行交互或利用C语言的库函数时。②系统调用:在汇编中,系统调用是通过软中断(int 0x80)来执行的,一些系统调用需要更复杂的参数传递和处理,这时可以使用C函数来简化处理。③特殊硬件的访问:在一些特殊的硬件平台上,需要用到特定的C库函数来进行底层硬件访问。②调用C函数:使用适当的调用约定(例如stdcall)来调用C函数,并正确传递参数。①声明C函数:在汇编程序中声明C函数,以便汇编器知道函数的名称和参数类型。原创 2024-05-31 13:59:14 · 1029 阅读 · 0 评论 -
汇编:x86汇编环境搭建与基础框架(32位)
32位汇编代码编写环境:Visual Studio(笔者用的版本为2017);先来说一下在Visual Studio 2017中编写汇编代码的准备操作:①创建空项目②设置项目属性:平台工具集设置为Visual Studio 2015(v140),因为一些库再2015版本后取消了;③为该项目生成自定义依赖项;勾选masm文件④设置汇编代码入口点为main⑤为了方便阅读代码,可以下载插件此处我们下载Asm Dude插件,帮助我们更好地编写代码(该插件可以高亮汇编代码)原创 2024-05-30 15:58:52 · 1239 阅读 · 0 评论 -
汇编:循环结构
16位汇编语言中的循环结构主要通过条件跳转指令(如、, , , , , 等)来实现,常见的循环类型包括循环和循环;指令的操作非常简单:它将CX寄存器的值减1,如果结果不为零,则跳转到指定的标签。这使得它特别适用于已知循环次数的情况,比如循环。 是一个标签,指向循环的开始位置。将寄存器 设置为 9,表示将从9开始循环。:将 的值复制到 寄存器。:将 的值加上 。在ASCII码表中,数字字符'0'的值是0x30,所以加上0x30可以将0-9的数字转换为'0'-'9'的ASCII字符。:将原创 2024-05-28 21:05:20 · 1389 阅读 · 0 评论 -
汇编:比较&跳转
在16位汇编语言(如x86汇编)中,比较指令用于比较两个操作数的大小,通常用于条件跳转、循环控制等逻辑操作,比较指令(如CMP)会根据操作数的比较结果设置标志寄存器中的相关标志位。原创 2024-05-27 17:48:36 · 1934 阅读 · 0 评论 -
汇编:字符串的输出
在16位汇编程序中,可以使用DOS中断21h的功能号09h来打印字符串;:指令告诉汇编器代码段位于cs寄存器所指示的代码段中,数据段位于ds寄存器所指示的数据段中。和data ends之间的部分是数据段。在这里,szBuffer被定义为一个字符串,以结尾。0dh和0ah是 ASCII 字符集中的转义序列,分别代表回车(Carriage Return)和换行(Line Feed)。0dh对应于回车字符,表示将光标移动到当前行的开头,但不换行。通常与0ah。原创 2024-05-26 19:15:39 · 1299 阅读 · 0 评论 -
汇编:数据类型
定义一个字节,值为0x1A定义一个字节,值为字符'A'的ASCII码2.字(Word)原创 2024-05-25 21:27:58 · 832 阅读 · 0 评论 -
汇编:函数以及函数参数传递
函数在汇编中被定义为一个带有标签的代码块,通常使用proc和endp关键字来定义函数的开始和结束。;函数体。原创 2024-05-24 22:33:53 · 4508 阅读 · 0 评论 -
汇编:加减乘除指令
它将累加器(AX)中的值除以一个操作数,并将商存储在累加器中,余数存储在另一个指定的寄存器中。它将累加器中的有符号整数除以一个操作数,并将商存储在累加器中,余数存储在另一个指定的寄存器中。指令通常用于乘法运算,它可以是一个乘法操作数与累加器的相乘,也可以是一个乘法操作数与其他寄存器或内存中的值相乘。接着往下执行,发现立即数2被载入BX寄存器中,且AX寄存器中的值和BX寄存器中的值相加,存储在BX寄存器中。指令通常用于除法运算,它可以是累加器与一个除数的相除,也可以是累加器与其他寄存器或内存中的值相除。原创 2024-05-22 19:26:06 · 3124 阅读 · 0 评论 -
汇编-汇编程序基本框架
16位汇编程序是一种直接控制计算机硬件的低级编程语言,通常用于微控制器和早期的个人计算机。编写16位汇编程序需要理解计算机的体系结构、汇编语言的指令集和内存模型。原创 2024-05-21 23:37:57 · 998 阅读 · 0 评论 -
汇编-16位汇编环境搭建
在学习16位汇编时,我选择的环境是在VMware中安装Windows XP虚拟机来学习;在win10,win11环境中原生不支持直接运行 16 位程序,如果要在win10或者win11中运行和调试16位汇编程序则需要通过如安装DOS环境模拟器等通过一些工具和方法来支持16位汇编程序运行。接着直接点击下一步,不进行激活(随着VMware的更新迭代可能出现Windows XP虚拟机激活出现错误无限激活的情况);在MASM文件夹中创建一个.txt文件,并将上述代码复制进该.txt文件中;原创 2024-05-18 13:14:03 · 788 阅读 · 0 评论 -
汇编-内存
低字节(Low Byte):数据的最低有效部分,即最低的8位。高字节(High Byte):数据的最高有效部分,即最高的8位。0x12是高字节0x34是低字节。原创 2024-05-17 13:08:37 · 875 阅读 · 0 评论 -
汇编-基础&处理器
汇编语言(Assembly Language)是一种低级别的计算机编程语言,,在汇编语言中,程序员使用助记符(mnemonics)来表示机器指令,每个助记符对应于一条特定的机器指令,汇编语言提供了一种更接近机器语言的抽象,但比机器语言更容易理解和编写。原创 2024-05-16 11:21:55 · 856 阅读 · 0 评论