逆向工程核心原理-IA-32寄存器
IA-32由四类寄存器组成:通用寄存器,段寄存器,程序状态与控制寄存器,指令指针寄存器。
通用寄存器:用于传送和暂存数据,也可参与算数逻辑运算,并保存运算结果。
EAX(0-31) 32位 AX (0-15) EAX的低16位 AH (8-15) AX的高8位 AL(0-7) AX的低8位
EAX:针对操作数和结果数据的 累加器 EAX一般用在函数返回值中,所有win32API函数都会先把返回值保存到EAX再返回。
EBX:DS段中的数据指针 基址寄存器
ECX:字符串和循环操作的 计数器
EDX:I/O指针 数据寄存器
EBP:SS段中栈内数据指针 扩展基址指针寄存器
ESI:字符串操作源指针 源变址寄存器
EDI:字符串操作目标指针 目的变址寄存器
ESP:SS断中栈指针 栈指针寄存器 ESP指向栈顶地址
段寄存器:段寄存器总共有6种寄存器,分别为cs,ss,ds,es,fs,gs。
CS:Code Segment 代码段寄存器 存放应用程序代码所在段的段基址
SS:Stack Segment 栈段寄存器 存放栈段的段基址
DS:Data Segment 数据段寄存器 存放数据段的段基址
ES:Extra(Data)Segment 附加(数据)段寄存器 以下都是存放附加数据段的段基址
FS:Data Segment 数据段寄存器
GS:Data Segment 数据段寄存器
FS寄存器用于计算SEH(Structured Exception Handler,结构化异常处理机制)、TEB(Thread Environment Block,线程环境块)、PEB(Process Environment Block,进程环境块)等地址,这些属于高级调试技术。
程序状态与控制寄存器:
EFLAGS:Flag Register, 标志寄存器 共有32位元,每位都有特定的含义。
ZF:Zero Flag,零标志 若运算结果为0,则其值为1,否则为0.
OF:Overflow Flag,溢出标志 有符号整数溢出时,OF值被置为1。此外,MSB(最高有效位)改变时,其值也被设为1。
CF:Carry Flag,进位标志 无符号整数溢出时,其值也被置为1。
指令指针寄存器:
EIP:Instruction Pointer,指令指针寄存器 保存着CPU要执行的指令地址,EIP只能间接修改,还可以通过中断或异常来修改EIP的值。
逆向工程核心原理-IA-32寄存器的更多相关文章
- 《逆向工程核心原理》——IAThook
hook逻辑写入dll中,注入dll. #include "pch.h" #include <tchar.h> #include "windows.h&quo ...
- 《逆向工程核心原理》——通过调试方式hook Api
1.附加目标进程, 2.CREATE_PROCESS_DEBUG_EVENT附加事件中将目标api处设置为0xcc(INT 3断点) 3.EXCEPTION_DEBUG_EVENT异常事件中,首先判断 ...
- 《逆向工程核心原理》Windows消息钩取
DLL注入--使用SetWindowsHookEx函数实现消息钩取 MSDN: SetWindowsHookEx Function The SetWindowsHookEx function inst ...
- 《逆向工程核心原理》——TLS回调函数
pe中TLS(thread local storage)中函数的执行时机早于入口函数(entry point), 相关结构: // // Thread Local Storage // typedef ...
- 《逆向工程核心原理》——API HOOK
编写dll处理hook逻辑,注入到目标进程,实现api hook. Windows10 notepad,通过hook kernel32.dll.WriteFile,实现小写字母转大写保存到文件. ho ...
- 《逆向工程核心原理》——DLL注入与卸载
利用CreateRemoteThread #include <iostream> #include <tchar.h> #include <Windows.h> # ...
- 【算法】(查找你附近的人) GeoHash核心原理解析及代码实现
本文地址 原文地址 分享提纲: 0. 引子 1. 感性认识GeoHash 2. GeoHash算法的步骤 3. GeoHash Base32编码长度与精度 4. GeoHash算法 5. 使用注意点( ...
- Zookeeper核心原理
Zookeeper 的核心原理 Zookeeper 的由来 各个节点的数据一致性 怎么保证任务只在一个节点执行 如果orderserver1挂了,其他节点如何发现并接替 存在共享资源,互斥性.安全性 ...
- Redis核心原理与实践--字符串实现原理
Redis是一个键值对数据库(key-value DB),下面是一个简单的Redis的命令: > SET msg "hello wolrd" 该命令将键"msg&q ...
随机推荐
- 超好用的C#控制台应用模板
本文是Wei的公众号投稿文章: 默认模板之缺 在工作学习中,我们经常需要创建一些简单的控制台应用(Console App)去验证某个想法,或者作为小工具交付给其他同事. 通常我们的选择是 Visual ...
- nginx在Centos7.5下源码安装和配置
安装nginx 安装nginx依赖包 yum install -y pcre-devel zlib-devel openssl-devel wget gcc tree vim 进入目录/root/se ...
- Scanner对象及其获取数据出现小问题和解决方案
Scanner类简介: Java 5添加了java.util.Scanner类,我们可以通过Scanner类来获取用户输入.它是以前的StringTokenizer和Matcher类之间的某种结合.由 ...
- .NET Core TDD 前传: 编写易于测试的代码 -- 缝
有时候不是我们不想做单元测试, 而是这代码写的实在是没法测试.... 举个例子, 如果一辆汽车在产出后没完成测试, 那么没人敢去驾驶它. 代码也是一样的, 如果项目未能进行该做的测试, 那么客户就不敢 ...
- Java中的基本类型转换,数据溢出原理
java中的数据类型 java是一种强类型语言,在java中,数据类型主要有两大类,基本数据类型和引用数据类型,不同的数据类型有不同的数据存储方式和分配的内存大小. 基本数据类型中,各数据类型所表示的 ...
- Java~命名规范
下面总结以点java命名规范 虽然感觉这些规范比起C#来说有点怪,但还是应该尊重它的命名! 命名规范 项目名全部小写 包名全部小写 类名首字母大写,如果类名由多个单词组成,每个单词的首字母都要大写. ...
- PHPStorm中对nodejs项目进行单元测试
安装必要的包 nodejs的单元测试最常用的是使用mocha包.首先确保你本地安装nodejs,之后安装mocha包. npm install mocha -g 然后还需要安装相关的断言工具,Node ...
- 配置Nginx部署静态资源和自动跳转到https
一.首先在阿里云后台添加域名解析: 二.两个网站的静态资源在以下目录: /www/temp/blog/public 三.在服务器端配置nginx: cd /etc/nginx/conf.d 添加两个文 ...
- vue实例的生命周期函数
Vue的生命周期函数通常分为以下三类: ①实例创建时的生命周期函数:②实例执行时的生命周期的函数:③实例销毁时的生命周期的函数. 代码与注释详解: <!DOCTYPE html> < ...
- Abp.Castle.Log4Net : Method 'get_IsTraceEnabled' does not have an implementation
异常内容 System.TypeLoadException HResult=0x80131522 Message=Method 'get_IsTraceEnabled' in type 'Abp.Ca ...