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寄存器的更多相关文章

  1. 《逆向工程核心原理》——IAThook

    hook逻辑写入dll中,注入dll. #include "pch.h" #include <tchar.h> #include "windows.h&quo ...

  2. 《逆向工程核心原理》——通过调试方式hook Api

    1.附加目标进程, 2.CREATE_PROCESS_DEBUG_EVENT附加事件中将目标api处设置为0xcc(INT 3断点) 3.EXCEPTION_DEBUG_EVENT异常事件中,首先判断 ...

  3. 《逆向工程核心原理》Windows消息钩取

    DLL注入--使用SetWindowsHookEx函数实现消息钩取 MSDN: SetWindowsHookEx Function The SetWindowsHookEx function inst ...

  4. 《逆向工程核心原理》——TLS回调函数

    pe中TLS(thread local storage)中函数的执行时机早于入口函数(entry point), 相关结构: // // Thread Local Storage // typedef ...

  5. 《逆向工程核心原理》——API HOOK

    编写dll处理hook逻辑,注入到目标进程,实现api hook. Windows10 notepad,通过hook kernel32.dll.WriteFile,实现小写字母转大写保存到文件. ho ...

  6. 《逆向工程核心原理》——DLL注入与卸载

    利用CreateRemoteThread #include <iostream> #include <tchar.h> #include <Windows.h> # ...

  7. 【算法】(查找你附近的人) GeoHash核心原理解析及代码实现

    本文地址 原文地址 分享提纲: 0. 引子 1. 感性认识GeoHash 2. GeoHash算法的步骤 3. GeoHash Base32编码长度与精度 4. GeoHash算法 5. 使用注意点( ...

  8. Zookeeper核心原理

    Zookeeper 的核心原理 Zookeeper 的由来 各个节点的数据一致性 怎么保证任务只在一个节点执行 如果orderserver1挂了,其他节点如何发现并接替 存在共享资源,互斥性.安全性 ...

  9. Redis核心原理与实践--字符串实现原理

    Redis是一个键值对数据库(key-value DB),下面是一个简单的Redis的命令: > SET msg "hello wolrd" 该命令将键"msg&q ...

随机推荐

  1. [AI开发]基于深度学习的视频多目标跟踪实现

    据我目前了解掌握,多目标跟踪大概有两种方式: Option1 基于初始化帧的跟踪,在视频第一帧中选择你的目标,之后交给跟踪算法去实现目标的跟踪.这种方式基本上只能跟踪你第一帧选中的目标,如果后续帧中出 ...

  2. #Java学习之路——基础阶段二(第四篇)

    我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...

  3. Java读取excel表,getPhysicalNumberOfCells()和getLastCellNum区别

    excel表存入数据库,发现有时报数组下标越界异常.调试发现用了 getPhysicalNumberOfCells(),这个是用来获取不为空的的列个数. getLastCellNum是获取最后一个不为 ...

  4. Java枚举:小小enum,优雅而干净

    <Java编程思想>中有这么一句话:“有时恰恰因为它,你才能够‘优雅而干净’地解决问题”——这句话说的是谁呢?就是本篇的主角——枚举(Enum)——大家鼓掌了. 在之前很长时间一段时间里, ...

  5. 【Android Studio安装部署系列】六、在模拟器上运行项目

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 在模拟器上运行项目的步骤.不过在实际开发中,一般不采用这种方式,因为影响电脑的运行,所以一般使用真机运行项目. 运行项目 创建模拟器 ...

  6. TypeScript 上手教程

    无疑,对于大型项目来说,Vanilla Js 无法满足工程需求.早在 2016 年 Anuglar 在项目中引入 TypeScript 时,大概也是考虑到强类型约束对于大型工程的必要性,具体选型考虑可 ...

  7. chrome 错误 ERR_CACHE_READ_FAILURE

    问题现象 谷歌浏览器,点击后退按键提示:ERR_CACHE_READ_FAILURE 错误 解决办法 1. chrome://flags/#enable-simple-cache-backend 2. ...

  8. Jenkins~配合Docker及dotnetCore进行生产和测试环境的灵活部署

    回到目录 首先要清楚本文是讲dotnetcore项目在生产和测试环境部署的,这在过去的frameworks项目里,我们可以通过设置web.config的环境变量,然后再发布时指定具体的变量,去实现生产 ...

  9. dubbo不完全指南

    Dubbo架构 节点角色说明 节点 角色说明 Provider 暴露服务的服务提供方 Consumer 调用远程服务的服务消费方 Registry 服务注册与发现的注册中心 Monitor 统计服务的 ...

  10. 深入理解Linux内核 学习笔记(2)

    第二章 :内存寻址 略.基本同计算机组成原理中的讲述 内核代码和数据结构会存储在一个保留的页框中. 常规Linux安装在RAM物理地址0x00100000开始的地方.因为:页框0是由BIOS使用,存放 ...