news 2026/10/23 22:26:06

32位汇编常见指令

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
32位汇编常见指令

32位汇编常见指令
1)32位的汇编:核心针对x8632位处理器,常用指令按功能可归纳为:数据传输类(MOV 目的,源/PUSH源/POP目的/LEA目的,源),算术运算类(ADD 目的,源/SUB目的,源/MUL源/IMUL源/DIV源/IDIV源/INC操作数/DEC操作数),逻辑运算类(AND 目的,源/OR目的,源/XOR目的,源/NOT操作数/SHL目的,计数值/SHR目的,计数值),控制转移类(JMP 目标/JZ/JE目标/JNZ/JNE目标/CMP操作数1, 操作数2/CALL目标/RET),栈操作类(PUSHAD/POPAD),所有指令均基于32位寄存器(EAX/EBX/ECX等)和32位内存地址操作。


2)32位的工具ollydgb32.exe
ollydgb32.exe是针对32位x86架构程序的经典动态调试工具,支持32位汇编指令级调试、内存/寄存器实时查看修改,断点设置,指令单步执行,常用于32位汇编程序调试,逆向分析及漏洞挖掘,可直接加载32位可执行文件并解析对应的汇编指令执行流程。


3)32位的寄存器,内存,以及堆栈
寄存器:通用寄存器(EAX/EBX/ECX/EDX/ESI/EDI/EBP/ESP),还有段寄存器,标志寄存器,用于高速暂存和处理数据,访问速度远快于内存。
内存:以32位地址总线寻址,地址范围0~0xFFFFFFFF,按字节/字/双字为单位存储数据,是程序数据的核心存储区域。
堆栈:本质就是内存,用来存储临时变量,函数传递等,遵循先进后出原则,是32位程序运行时的关键存储区域栈顶。
ESP:32位栈顶指针寄存器,始终指向堆栈当前最顶端的位置,压栈 (ESP-4),出栈 (ESP+4) 时自动修改其值栈底。
EBP:32位栈基址指针寄存器,指向当前栈帧的底部,用于定位栈内函数参数,局部变量,是栈帧操作的基准地址。


!!!咱们把Windows下面所有汇编过一遍哦,因为后面要带着各位继续深入,很多地方咱们要用到汇编语言,如破解,逆向,代码还原,pwn,花指令,壳,免杀,二进制的漏洞分析/漏洞利用exp编写,提权,驱动开发,嵌入式开发等等。其他的安卓,苹果dylib/deb/arm,固件分析等空了再上!!!

4)案例
案例寄存器操作od随便打开一个exe程序实验就行观察eax,ax,ah,al变化:
MOV EAX,12345678
MOV AX,9999
MOV AH,88
MOV AL,66


案例内存操作od随便打开一个exe程序实验就行:
读取内存的值
MOV EAX,DWORD PTR DS:[4B011B]
MOV EAX,0x4B011B

写入eax值到内存中(写入前咱们把EAX寄存器修改为123,内存查看内容变化)
MOV DWORD PTR DS:[4B011F],EAX
MOV DWORD PTR DS:[4B011F],123

获取内存编号4B41DF
LEA EAX,DWORD PTR DS:[4B011F]
LEA EAX,DWORD PTR DS:[esp+8]

or
LEA EAX,[ESP+8]

案例堆栈操作od随便打开一个exe程序实验就行:
入栈/压栈都行
push 12345678
push eax

出栈/吐栈都行
pop ecx
pop edx

变形操作
mov eax,12345678
push eax
|
mov eax,12345678
mov dword ptr ds:[esp],eax
lea esp,dword ptr ss:[esp-4]

变形操作
mov eax,12345678
push eax
pop ecx
|
mov eax,12345678
mov ecx,dword ptr ss:[esp]
lea esp,dword ptr ss:[esp+4]

同样入栈
mov eax,12345678
lea edi,dword ptr ss:[esp]
stos dword ptr es:[edi]

重复3次入栈
mov eax,12345678
lea edi,dword ptr ss:[esp]
mov ecx,3
rep stos dword ptr es:[edi]

案例JCC操作od随便打开一个exe程序实验就行:
; 20=20,条件成立,跳转
MOV EAX, 20
CMP EAX, 20
JE 00401013

;10≠20,条件成立,跳转
MOV EAX, 10
CMP EAX, 20
JNE 00401013

;20≤20,条件成立,跳转
MOV EAX, 20
CMP EAX, 20
JLE 00401013

案例逆向od查看入栈,出栈变化以及返回结果
int add(int a, int b) 
{
    return a + b;
}

; 函数入口地址:00C81770
00C81770 > 55               PUSH EBP             ; 保存旧的EBP(栈基址指针)到栈中,栈顶ESP -= 4
00C81771   8BEC             MOV EBP,ESP          ; 将ESP的值赋给EBP,建立新的栈帧,此时EBP指向旧EBP的位置
00C81773   81EC C0000000    SUB ESP,0C0          ; 栈顶ESP -= 0xC0(192字节),为函数局部变量分配栈空间
00C81779   53               PUSH EBX             ; 保存EBX寄存器到栈中,ESP -= 4(遵循函数调用约定,保护非易失寄存器)
00C8177A   56               PUSH ESI             ; 保存ESI寄存器到栈中,ESP -= 4
00C8177B   57               PUSH EDI             ; 保存EDI寄存器到栈中,ESP -= 4
00C8177C   8BFD             MOV EDI,EBP          ; 将EBP的值赋给EDI,EDI作为内存填充的目标地址
00C8177E   33C9             XOR ECX,ECX          ; ECX寄存器清零(异或自身),作为REP指令的计数器
00C81780   B8 CCCCCCCC      MOV EAX,CCCCCCCC    ; 将0xCCCCCCCC(调试模式下的填充值)加载到EAX
00C81785   F3:AB            REP STOS DWORD PTR ES:[EDI] ; 重复执行:将EAX的值写入EDI指向的内存,EDI += 4,ECX -= 1,直到ECX=0
          &

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/19 16:56:15

【开题答辩全过程】以 基于PHP的发热病人管理平台的设计与实现为例,包含答辩的问题和答案

个人简介 一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等 开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。 感谢大家…

作者头像 李华
网站建设 2026/10/21 13:26:53

写作压力小了!10个降AIGC平台测评:专科生如何选才能降AI率过关?

在当前高校论文写作中,AI生成内容的广泛使用让越来越多学生面临AIGC率过高的问题。对于专科生而言,不仅需要确保论文内容符合学术规范,还要避免因AI痕迹过重而被系统判定为抄袭或重复。面对这一挑战,AI降重工具逐渐成为学生们的“…

作者头像 李华
网站建设 2026/10/21 19:11:22

“好用”的RPA该是什么样?影刀用全功能、高易用性,给了我答案

功能全面性优秀的RPA工具需覆盖从简单到复杂的所有自动化场景。影刀提供流程录制、数据处理、API调用、OCR识别等功能,支持跨系统操作(如Excel、ERP、浏览器等)。其内置300命令块,涵盖文件管理、邮件发送、数据库操作等高频需求&a…

作者头像 李华
网站建设 2026/10/20 22:59:57

AIGC降重实战问答:解决您最关心的十大问题

随着AIGC降重技术在学术领域的应用日益广泛,越来越多的学生和研究者开始尝试这一高效工具。然而,在实际使用过程中,各种疑问和困惑也随之产生。本文收集了关于AIGC降重最常见的十大问题,并提供详细解答和实用建议。 01 基础原理篇…

作者头像 李华
网站建设 2026/10/16 10:01:05

谷歌AdSense套利是什么?怎么做才能赚到钱

在跨境流量和广告投放的世界里,最常见的一类赚钱模式就是套利——用低价买入流量,再通过广告平台变现赚取差价。很多新手听说过“谷歌AdSense套利”,但又觉得概念很抽象,甚至误以为随便做个站挂广告就能赚钱,不知道具体…

作者头像 李华
网站建设 2026/10/23 19:19:54

ubuntu启一个udp server,由一个client访问

1、server_8078.py代码:# udp_server.py import socketdef start_udp_server(host, port):# 创建一个UDP套接字server_socket socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 绑定套接字到地址和端口server_socket.bind((host, port))print(f"UDP Server…

作者头像 李华