学习逆向的背景知识(自用)

news/2025/10/18 19:24:32/文章来源:https://www.cnblogs.com/yumi0721/p/19150071

学习逆向的背景知识(自用)

常见的寄存器

  • 指令指针(程序计数器) IP EIP RIP 寄存下一个指令的地址

  • 通用寄存器:

  • 累加器寄存器 EAX RAX 寄存算术运算结果

  • 基址寄存器 EBX RBX 寄存引用偏移量的基址

  • 计数寄存器 ECX RCX 用于循环等计数操作

  • 数据寄存器 EDX RDX 用于乘除操作

  • 堆栈指针 ESP RSP 指向堆栈顶部

  • 基指针寄存器 EBP RBP 用于访问栈传递的参数

  • 源索引寄存器 ESI RSI 用于字符串操作,与数据段(DS)寄存器一起作为偏移量使用

  • 目标索引寄存器 EDI RDI 用于字符串操作,与附加段(ES)寄存器一起作为偏移量使用

  • 不存在于32位系统的寄存器:R8-R15

  • 状态标志寄存器(Status Flag Registers) EFLAGS RFLAGS 存储状态标志

    • 零标志(ZERO FLAG)用 ZF 表示,零标志指示最后一次执行的指令的结果是否为零。例如,如果执行一条指令将 RAX 减去自身,结果将为 0。在这种情况下,ZF 将被设置为 1。
    • 进位标志(Carry Flag)由 CF 表示,进位标志指示最后一次执行的指令结果是否太大或太小,无法存储在目标位置。例如,如果我们把 0xFFFFFFFF 和 0x00000001 相加,并将结果存储在一个 32 位寄存器中,结果将太大无法容纳在寄存器中。在这种情况下,CF 将被设置为 1。
    • 符号标志(Sign Flag)符号标志(SF)指示运算结果是否为负数或最高有效位是否被设置为 1。如果满足这些条件,SF 将被设置为 1;否则,设置为 0。
    • 陷进标志(Trap Flag)陷阱标志(TF)表示处理器是否处于调试模式。当 TF 被设置时,CPU 会逐条指令执行以用于调试目的。这可以被恶意软件用来识别它们是否在调试器中运行。
    General Registers 通用寄存器 Segment Registers 段寄存器 Status Registers 状态寄存器 Instruction Pointer 指令指针
    RAX, EAX, AX, AH, AL CS EFLAGS EIP, RIP
    RBX, EBX, BX, BH, BL RBX,EBX,BX,BH,BL SS
    RCX, ECX, CX, CH, CL DS
    RDX, EDX, DX, DH, DL ES
    RBP, EBP, BP FS
    RSP, ESP, SP GS
    RSI, ESI, SI
    RDI, EDI, DI
    R8-R15
  • 段寄存器(Segment Registers)将平坦的内存空间转换为不同的段,以便更容易地进行寻址。

  • 代码段(CS)指向内存中的代码段

  • 数据段(DS)指向内存中程序的 数据部分

  • 堆栈段(SS)指向内存中程序的堆栈

  • 附加段(ES、FS、GS)这些附加段寄存器指向不同的数据部分。它们和 DS 寄存器将程序的内存划分为四个不同的数据部分

常见的汇编指令

1.数据传输指令

这些指令用于在寄存器、内存和立即数之间移动数据

指令 格式 意义 示例
MOV MOV dst, src 将数据从源(寄存器/内存/立即数)复制到目标(寄存器/内存)。 mov eax, ebx(将 ebx 值复制到 eax
MOVZX MOVZX dst, src 零扩展:将小尺寸数据(如字节)复制到大尺寸寄存器,高位补 0。 movzx eax, blbl 字节扩展到 eax
MOVSX MOVSX dst, src 符号扩展:将带符号小尺寸数据复制到大寄存器,保持符号。 movsx eax, blbl 带符号扩展到 eax
LEA LEA dst, [addr] 加载有效地址:将内存地址(而非内容)存入目标寄存器。 lea eax, [ebx+4]ebx+4 的地址存入 eax
PUSH PUSH src 将数据压入栈顶,栈指针(ESP)减小。 push eaxeax 值压入栈)
POP POP dst 从栈顶弹出数据到目标,ESP 增加。 pop eax(栈顶值弹出到 eax
XCHG XCHG dst, src 交换两个操作数的内容。 xchg eax, ebx(交换 eaxebx

2.算数运算指令

用于执行数学运算,如加减乘除。

指令 格式 意义 示例
MOV MOV dst, src 将数据从源(寄存器/内存/立即数)复制到目标(寄存器/内存)。 mov eax, ebx(将 ebx 值复制到 eax
MOVZX MOVZX dst, src 零扩展:将小尺寸数据(如字节)复制到大尺寸寄存器,高位补 0。 movzx eax, blbl 字节扩展到 eax
MOVSX MOVSX dst, src 符号扩展:将带符号小尺寸数据复制到大寄存器,保持符号。 movsx eax, blbl 带符号扩展到 eax
LEA LEA dst, [addr] 加载有效地址:将内存地址(而非内容)存入目标寄存器。 lea eax, [ebx+4]ebx+4 的地址存入 eax
PUSH PUSH src 将数据压入栈顶,栈指针(ESP)减小。 push eaxeax 值压入栈)
POP POP dst 从栈顶弹出数据到目标,ESP 增加。 pop eax(栈顶值弹出到 eax
XCHG XCHG dst, src 交换两个操作数的内容。 xchg eax, ebx(交换 eaxebx

3.逻辑运算指令

用于位操作和逻辑运算。

指令 格式 意义 示例
AND AND dst, src 目标 &= 源(按位与),常用于清零或掩码。 and eax, 0xFF(保留 eax 低 8 位)
OR OR dst, src 目标 = 源(按位或)。
XOR XOR dst, src 目标 ^= 源(按位异或),常用于清零(xor eax, eax)。 xor eax, eaxeax = 0
NOT NOT dst 目标按位取反。 not eaxeax = ~eax
SHL SHL dst, count 左移,空位补 0,溢出位存 CF。 shl eax, 2eax << 2
SHR SHR dst, count 右移,空位补 0。 shr eax, 2eax >> 2

4.控制流指令

用于跳转、调用和返回,控制程序执行流。

指令 格式 意义 示例
JMP JMP addr 无条件跳转到指定地址。 jmp 0x8048000(跳转到地址)
JE/JZ JE addr 零标志(ZF=1)时跳转(等于)。 je label(相等时跳转)
JNE/JNZ JNE addr 零标志(ZF=0)时跳转(不等于)。 jne label(不等时跳转)
CALL CALL addr 调用函数,压入返回地址后跳转。 call 0x8048000(调用函数)
RET RET 从栈弹出返回地址,跳转到该地址。 ret(返回调用者)
INT INT n 触发中断,调用系统服务。 int 0x80(Linux 系统调用)

5.比较与测试指令

用于比较或测试数据,设置标志位以供条件跳转。

指令 格式 意义 示例
CMP CMP op1, op2 比较 op1 和 op2(op1 - op2),设置标志位(如 ZF、CF)。 cmp eax, ebx(比较 eaxebx
TEST TEST op1, op2 按位与,设置标志位,通常检查是否为 0。 test eax, eax(检查 eax 是否为 0)

6.栈操作指令

直接操作栈,常用于函数调用和参数传递。

指令 格式 意义 示例
PUSH PUSH src 压栈,ESP 减小(32 位减 4,64 位减 8)。 push 0x68732f2f(压入 //sh
POP POP dst 弹栈,ESP 增加。 pop ebx(弹栈到 ebx
PUSHAD PUSHAD 压入所有通用寄存器(32 位)。 pushad(保存寄存器状态)
POPAD POPAD 弹出所有通用寄存器(32 位)。 popad(恢复寄存器状态)

7.系统调用相关指令

用于触发操作系统服务(Linux 常见)。

指令 格式 意义 示例
INT 0x80 INT 0x80 32 位 Linux 系统调用,调用号在 eax,参数在 ebxecxedx 等。 mov eax, 0xb; int 0x80(调用 execve
SYSCALL SYSCALL 64 位 Linux 系统调用,调用号在 rax,参数在 rdirsirdx 等。 mov rax, 59; syscall(64 位 execve

8.其他常见指令

指令 格式 意义 示例
NOP NOP 空操作,占 1 字节(0x90),用于填充或延迟。 nop(无操作)
HLT HLT 暂停 CPU,直到中断。 hlt(停止执行)
CLI CLI 禁用中断。 cli(禁止中断)
STI STI 启用中断。 sti(允许中断)

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

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

相关文章

Linux-网络安全私房菜(二)

Linux-网络安全私房菜(二)目录防火墙防火墙简单操作iptablestips建议系统资源篇章理解数据流输出重定向stress压力测试命令free命令netstat命令ss命令软件包篇章rpm包管理dpkg包管理磁盘篇章MBRfdiskGPT(GUID)gdiskpar…

pycharm使用远程的ssh的解释器

今天使用了远程ssh的解释器1.使用 专业版本的pycharm 2. 3. 解释器使用 .conda/envs/.../lth/python.exe 4. 5. 如果你有一些数据集也在这附近,需要把数据集 exclude掉 总的来说, 这么做就够了。 可惜我老师只有…

Android SSL Pinning检测利器:SSLPinDetect技术解析

本文详细介绍了SSLPinDetect工具的技术原理和实现,这是一个用于Android应用安全分析的SSL Pinning检测工具,通过多线程扫描、内存映射读取和预编译正则表达式等技术,实现高效的静态代码分析。SSLPinDetect:Android…

AI元人文:社区调解的数字剧场

AI元人文:社区调解的数字剧场 在AI元人文的视野下,社区调解经历了一场深刻的范式转变——从对错的裁判转变为多方价值诉求在特定情境舞台上的创造性对话。这不仅是方法的升级,更是对调解本质的重新定义。 一、从对抗…

2025年粉末冶金制品/零件厂家推荐排行榜,专业制造与高品质服务的首选!

2025年粉末冶金制品/零件厂家推荐排行榜,专业制造与高品质服务的首选!随着工业技术的不断进步和市场需求的多样化,粉末冶金制品及零件在各个领域的应用越来越广泛。为了帮助采购决策者筛选出优质的粉末冶金制品及零…

详细介绍:【探寻C++之旅】第十六章:unordered系列的认识与模拟实现

详细介绍:【探寻C++之旅】第十六章:unordered系列的认识与模拟实现pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &qu…

Dubbo入门-Dubbo的快速使用

什么是Dubbo Dubbo是一个分布式、高性能、透明化的RPC服务框架。 提供服务自动注册、自动发现等高效的服务治理方案,可以和Spring框架无缝集成。 Dubbo中服务端最核心的对象:ApplicationConfig:配置当前应用信息 Pr…

15 接口的介绍

15 接口的介绍接口 专业的抽象 定义 只有规范,自己无法写方法 规范的含义是,定义规则,即‘若,则’这类规范。 如:如果你是老师,则你要具备教学生的能力。 使用 public interface Name1{//接口中的所有定义都是抽…

傅里叶变换及DCT点滴

上图来自 PDF Fourier Transforms and the Fast Fourier Transform (FFT) Algorithm, Paul Heckbert. 如果a_n都相等的话,A_k是等比数列求和. 为啥傅里叶变换在解密中也有用?因为解密涉及大整数的分解,which涉及一…

【未完待续】MkDocs 部署安装教程

MkDocs 简介MkDocs 是一个基于 Python 的 Markdown 的静态网站生成工具,常用于快速搭建项目文档网站。 它界面简洁大方,配置简单,生成速度快,特别适合技术手册、内部知识库等场景,并可部署到 Github Pages,因此深…

傅里叶变换点滴

上图来自 PDF Fourier Transforms and the Fast Fourier Transform (FFT) Algorithm, Paul Heckbert. 如果a_n都相等的话,A_k是等比数列求和. 为啥傅里叶变换在解密中也有用?因为解密涉及大整数的分解,which涉及一…

[PaperReading] SAIL-Embedding Technical Report: Omni-modal Embedding Foundation Model

目录SAIL-Embedding Technical Report: Omni-modal Embedding Foundation ModelTL;DRDataRecommendation-aware Data ConstructionDynamic Hard Negative MiningQ:动态难负样本挖掘是什么原理?\(\lambda^*\)是如何动…

How to Practice English Daily for 30 mins

How to Practice English Daily for 30 minsWelcome to Bookish English 2. Tell me honestly, how many times have you said, "Ill start learning English tomorrow." But tomorrow never comes, right?…

Flash 8.0下载安装

Flash 8.0下载安装https://www.yutu.cn/softhtml/softsetup_136.html

英伟达个人AI超算Spark技术解析

英伟达DGX Spark个人AI超级计算机将于10月15日上市,搭载GB10 Grace Blackwell超级芯片,具备每秒千万亿次计算能力,支持高达2000亿参数AI模型,为研究人员提供桌面级AI训练解决方案。英伟达“个人AI超级计算机”将于…

[buuctf]jarvisoj_level3_x64

首先查看一下文件的保护措施在用ida打开看一下这里很明显在read函数进行输入的时候存在栈溢出,然后观察一下文件,没有后门函数,也没有可以用的binsh,那就可以向libc泄露这方面去想了 由于这里是64位的程序,所以在调…

SpringBoot系列十三:SpringBoot面试常见问题

你觉得 SpringBoot 最大的优势是什么呢? 答:SpringBoot 的最大的优势是“约定优于配置“。“约定优于配置“是一种软件设计范式,开发人员按照约定的方式来进行编程,可以减少软件开发人员需做决定的数量,获得简单的…

人生四大支柱 - 健康,金钱,工作,关系

人生四大支柱 如果把人生看作是一座大厦,想要这座大厦扛过人生一路的风风雨雨,让他能安稳长久,必须有坚实的支柱支撑大厦。 细数下来,最主要的有四根柱子:健康、金钱、工作、关系。它们相互依存,缺了哪一根,生活…

【Docker项目实战】使用Docker部署IT运维管理平台CAT - 指南

【Docker项目实战】使用Docker部署IT运维管理平台CAT - 指南2025-10-18 17:52 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importa…