当前位置: 首页 > news >正文

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

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

常见的寄存器

  • 指令指针(程序计数器) 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.hskmm.com/?act=detail&tid=33833

相关文章:

  • Linux-网络安全私房菜(二)
  • pycharm使用远程的ssh的解释器
  • Android SSL Pinning检测利器:SSLPinDetect技术解析
  • AI元人文:社区调解的数字剧场
  • 2025年粉末冶金制品/零件厂家推荐排行榜,专业制造与高品质服务的首选!
  • Dubbo入门-Dubbo的快速使用
  • 站位2
  • 傅里叶变换及DCT点滴
  • 【未完待续】MkDocs 部署安装教程
  • 傅里叶变换点滴
  • [PaperReading] SAIL-Embedding Technical Report: Omni-modal Embedding Foundation Model
  • 人生四大支柱 - 健康,金钱,工作,关系
  • 英伟达个人AI超算Spark技术解析
  • [buuctf]jarvisoj_level3_x64
  • SpringBoot系列十三:SpringBoot面试常见问题
  • [LangChain] 04. 提示词模板
  • 2025 最新不锈钢板厂家推荐榜:剖析国内头部品牌竞争优势,附优质供应商选择指南N06625/N06600/C70600不锈钢板厂家推荐
  • 2025 夹丝玻璃源头厂家最新推荐排行榜:解析防火 / 艺术 / 酒店等多场景厂商优势,助力精准选型
  • 2025 中空板源头厂家最新推荐排行榜揭晓:覆盖全产业链,老牌与新锐共筑品质标杆
  • 2025 年感温电缆厂家最新推荐榜单:覆盖线型 / 缆式 / 可恢复 / 消防等多类型产品,全方位解析头部企业核心优势
  • 2025 年盖板源头厂家最新推荐榜单:电力 / 隧道 / 电缆沟等多场景适用品牌优选,解析原材料采购与成本控制要点
  • win
  • 2025 年真空炉制造厂家最新推荐排行榜:涵盖高温烧结真空炉 / 真空退火炉 / 智能铍铜真空炉,助力企业精准选型
  • 2025 年最新推荐排水沟厂家排行榜:聚焦树脂 / 线性 / 树脂混凝土 / 成品 / U 型排水沟优质企业
  • 将 XMind 测试用例转换为 CSV 文件导入测试管理平台
  • 互评-OO之接口-DAO模式代码阅读及应用
  • experiment2
  • 【为美好CTF献上祝福】unity逆向
  • 扩展欧几里得算法
  • 今日学习笔记