大飞哥自习室 发表于 2022-3-23 15:19

寻址方式——数据在寄存器+实用软件分享



在程序执行的过程中,CPU会不断地处理数据。CPU处理的数据通常来自三个地方:数据在指令中直接给出,数据在寄存器中保存,数据在内存中保存。在使用高级语言进行开发的时候,CPU如何对数据处理对于程序员来说是不需要关心的,编译器会在代码编译的时候进行这些处理。而在使用汇编语言编写程序时,指令操作的数据来自何处,CPU应该从哪里取出数据,则是汇编程序员需要自己解决的问题。CPU寻找最终要操作数据的过程,称为“寻址”。
寻址介绍
1.指令中给出数据
操作数直接放在指令中,作为指令的一部分存放在代码里,这种方式称为立即数寻址。这是唯一在指令中给出数据的方式,也是最直观的知道数据是多少的方式。
举例代码如下:
在执行完上面的指令后,ESI寄存器的值是指令中给出的值,即00403010;EDI寄存器的值也是指令中给出的值,即00403020。
2.数据在寄存器中
操作数在寄存器中存放,在指令中指定寄存器名即可,这种方式称为寄存器寻址方式。这是唯一数据在寄存器中给出的方式。
举例代码如下:
在上面指令中,第一条指令是立即数寻址,将00403000放入EAX寄存器中;第二条指令是把EAX寄存器中的值传递给ESI寄存器。因此,ESI寄存器中的值是00403000。
3.数据在内存中
数据在内存中存放可以有多种方式给出,主要有直接寻址、寄存器间接寻址、变址寻址和基址变址寻址。
(1)直接寻址
在指令中直接给出操作数所在的内存地址称为直接寻址方式。举例代码如下:
MOV DWORD PTR , 12345678MOV EAX, DWORD PTR
在上面的指令中,重点观察第二条指令,第二条指令是将内存地址为00403000处的4个字节的值传送到EAX寄存器中。请在OD调试器中调试以上两条汇编指令。
(2)寄存器间接寻址
操作数的地址由寄存器给出,这里的地址指的是内存地址,而实际的操作数存储在内存中。举例代码如下:
MOV DWORD PTR , 12345678MOV EAX, 00403000
上面3条指令执行完成后,EDX寄存器取到了内存地址为00403000处的值,即12345678。
(3)其他
除了立即数寻址和寄存器寻址外,其余的寻址方式所寻找的操作数均在内存当中。除了直接寻址和寄存器间接寻址外,还有寄存器相对寻址、变址寻址、基址变址寻址、比例因子寻址等,这里不再一一进行介绍。下面给出其他几种寻址方式的形式,而不再介绍其具体的
名称,需要详细掌握寻址可自行参考汇编相关书籍。其他的寻址方法的形式如下:
①[寄存器+立即数]
②[寄存器+寄存器+数据宽度(1/2/4/8)]
③[寄存器+寄存器×数据宽度(1/2/4/8)+立即数]


特别分享几款实用软件:
Windows 10 Version 21H2 官方MSDN正式版光盘系统
链接:https://mdl.ink/QMcJl0
密码:2212
公文写作神器 v2.8.2.21一款功能强大的写作FZ软件.exe
链接:https://mdl.ink/K7Z7Fu
密码:7263

CyberLink Screen Recorder Deluxe v4.3.0.19614 Win一款功能强大的屏幕录像工具.exe
链接:https://mdl.ink/T0mwQv
密码:5788

Adobe After Effects 2022集成大量脚本预设插件一键安装版本.rar
链接:https://mdl.ink/BwMCzl
密码:3628

Adobe Premiere Pro 2022集成大量脚本预设插件一键安装版本.exe
链接:https://mdl.ink/C7Gcbd
密码:0741

Setup Factory9.5一款专业的安装程序制作软件+教程
链接:https://mdl.ink/QZ6xQZ
密码:3882

Inno Setup(安装包制作软件) 6.2.0 增强版+(Inno安装包解包工具
链接:https://mdl.ink/NfSkPM
密码:1232
Advanced Installer v19.3 Win一个强大的MSI安装包制作工具
链接:https://mdl.ink/ExzMX6
密码:5851

Adobe Photoshop 2022集成插件一键安装封装版.exe
链接:https://mdl.ink/RjFIBr
密码:2280

狸窝AI照片处理软件Leawo PhotoIns 3.0.0.0 WIN中文版一款专业的人工智能照片增强器.exe
链接:https://mdl.ink/OLEIpc
密码:2971

旧照片修复软件PhotoVINTAGE 3.15一款可以修复划痕边缘撕裂提高照片清晰度着色照片恢复软件.exe
链接:https://mdl.ink/BQFTAu
密码:0373

硬盘哨兵Hard Disk Sentinel Pro v6.0.1.0一款硬盘驱动器监视HDDSSD监控和分析硬盘哨兵磁盘检测工具.exe
链接:https://mdl.ink/N91dVD
密码:5997

Picture Colorizer Pro 3.1.0一款旧的黑白照片进行智能AI上色软件.exe
链接:https://mdl.ink/E0YBjO
密码:8302

万能音视图格式转换软件支持市面上90%的图片音频视频格式转换.exe
链接:https://mdl.ink/E09t48
密码:6077

Perfectly Clear Workbench一款人工智能批量自动分析照片并修复调色矫正人脸监测图像清晰处理照片软件.exe
链接:https://mdl.ink/sTNfKI
密码:8471

WiseAutoShutdown一款非常实用的电脑定时关机重启休眠的软件.exe
链接:https://mdl.ink/Ox6s75
密码:8795

Print Conductor v8.0.2203.14130一款图片文件批量打印工具打印机必备工具.exe
链接:https://mdl.ink/NLO7ZU
密码:5886

Qalculate(计算器)一款专业强大的电脑科学计算器.exe
链接:https://mdl.ink/C03HsB
密码:1259

MusicTools2.0一款全网付费音乐免费下载软件.exe
链接:https://mdl.ink/SB08Ac
密码:5302

Co re l 一款专业、高效的影视后期视频编辑处理软件.rar
链接:https://mdl.ink/R8aiwy
密码:5587

ShanaEncoder v5.3.1.0 一款可以最大限度的把视频压缩到最小的体积而不伤害视频本身的画质全能视频无损压缩转换器.exe
链接:https://mdl.ink/C4Ymht
密码:4000


最后给读者一些学习汇编指令的建议。要自行学习一个汇编指令,至少需要掌握指令的参数、影响的标志位和指令支持的寻址方式。如果要更深入地掌握一条汇编指令,就需要掌握指令消耗的CPU时间、指令机器码的长度等。对于指令消耗的CPU时间来说,对程序进行优化时是非常有用的。而掌握指令的长度会用在某些苛刻的环境中,比如缓冲区溢出技术中,为了解决缓冲区小的情况,就需要使用更短字节码的汇编指令了。
本文的重点是讨论逆向工具,希望在逆向相关领域有一定的发展,就必须深入学习和掌握汇编语言,这样在今后的学习中才会更加游刃有余。

CYTNRFji381 发表于 2022-3-23 15:30

感谢楼主

YKkUuXp10 发表于 2022-3-23 15:51

感谢楼主

CAemdn4780 发表于 2022-3-23 15:53

感谢楼主

SCGNZkMfvRec 发表于 2022-3-23 15:54

感谢楼主

KhnfGoBV 发表于 2022-3-23 15:54

谢谢分享

DzOqvIoNAW 发表于 2022-3-23 15:59

不可多得,支持楼主

EPdkrKb710 发表于 2022-3-23 16:07

感谢楼主

UpjaxeJ67380 发表于 2022-3-23 16:08

感谢楼主

LSABYgo2164 发表于 2022-3-23 16:45

谢谢分享
页: [1] 2 3 4 5 6 7 8
查看完整版本: 寻址方式——数据在寄存器+实用软件分享