马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
逆向基础知识-汇编和PE文件
【导语】本文为逆向工程基础笔记,先梳理 x86(32 位)汇编核心:九个通用寄存器及其编号与用途(eax 累加器、ecx 计数器、edx 余数、ebx 基址、esp 栈顶、ebp 基址指针、esi/edi 变址、eip 指令指针),以及寄存器可拆分(eax→ax→ah/al);再讲解八个关键标志位 CF/ZF/SF/OF/PF/AF 及 TF 跟踪标志,为逆向分析与漏洞利用打底。
核心观点
- 寄存器概览:32 位下有 eax/ecx/edx/ebx/esp/ebp/esi/edi/eip 九个寄存器,各有固定编号与角色(如 eip 存下一条待执行指令、esp 存栈顶)
- 寄存器拆分:eax 可拆为 16 位 ax,ax 再拆为 ah(高 8 位)与 al(低 8 位),理解位宽对逆向取证很关键
- 标志位(无符号):CF 进位/借位标志、ZF 零标志(xor eax,eax 置 1,mov eax,0 不改)、SF 符号标志、PF 奇偶标志、AF 辅助进位
- 标志位(有符号/调试):OF 溢出标志(针对有符号数,正+正=负等即溢出)、TF 跟踪标志(TF=1 时 CPU 单步执行便于调试)
适用场景
适用于逆向工程入门、x86 汇编基础复习、CTF pwn/re 与漏洞分析前置学习场景,适合安全研究初学者参考。
关键信息
(基础笔记,文中寄存器编号表、拆分示意与标志位判定示例见正文。)
汇编基础知识
1. 九个寄存器(32位)
- 寄存器 编号
- eax:累加器(accumulator), 它是很多加法乘法指令的缺省寄存器。 0
- ecx:计数器(counter), 是重复(REP)前缀指令和LOOP指令的内定计数器。 1
- edx:总是被用来放整数除法产生的余数。 2
- ebx:"基地址"(base)寄存器, 在内存寻址时存放基地址。 3
- esp:存储堆栈的最顶端 4
- EBP:是"基址指针",不是必须的 5
- esi: 6
- edi:变址寄存器,主要用于存放存储单元在段内的偏移量,作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。它们可作一般的存储器指针使用。 7
- eip:存储当前CPU马上要执行的指令
复制代码- 寄存器32位可以拆分为两个16位寄存器 eax拆分成ax(低16位) ax还可以拆分为ah(高位)和al(低位)
复制代码 2. 八个标志位
[code]CF(进位标志位):运算时最高位产生进位或借位时为1 # 针对无符号数的运算
ZF(零标志位):若当前运算结果为0,标志位为1 xor eax,eax ZF置1 mov eax,0 不会修改标志位的值
SF(符号标志位):该标志位与运算结果二进制的最高位相同,运算结果为负,则标志位为1
OF(溢出标志位):如果运算结果超过了机器能表示的范围则标志位为1 # 针对有符号数的运算 正+正=负 / 负+负=正 表示溢出
符号位有进位:1,最高有效位有进位:1 最终OF位为1 xor 1 = 0 (计组的溢出判断)
PF(奇偶标志位):运算结果的最低有效字节中(即低八位)含1的个数为偶数则标志位为1
AF(辅助进位标志):运算结果的低4位向高4位有进位或借位时为1
次要
TF(跟踪标志):为方便程序调试而配置,若TF=1,则CPU处于单步工作方式,在每条指令结束后产生中断
溢出判断 |