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

x86体系结构(WinDbg学习笔记)

寄存器

eaxAccumulator累加器
ebxBase register基寄存器
ecxCounter register计数器寄存器
edxData register - can be used for I/O port access
and arithmetic functions
数据寄存器-可用于I/O端口访问和算术函数
esiSource index register源索引寄存器
ediDestination index register目标索引寄存器
ebpBase pointer register基指针寄存器
espStack pointer堆栈指针

所有的整数寄存器均为32位。但是,其中这么多都有16位或8位子寄存器

寄存器子寄存器位置说明
eaxax低16位
ah高16位
al低8位
ebxbx低16位
bh高16位
bl低8位
ecxcx低16位
ch高16位
cl低8位
edxdx低16位
dh高16位
dl低8位
esisi低16位
edidi低16位
ebpbp低16位
espsp低16位

注意:在WinDbg使用”?“(Evaluate Expression)查看子寄存器时,子寄存器前要加“@”符号,如? @ax ,而不是 ? ax。但用“r”(Registers)命令时,不需要“@”符号

eipInstruction pointer指令指针,正在执行的指令的地址
flagsflags标志位

调用约定

x86体系结构具有多个不同的调用约定。但都遵循相同的寄存器保留和函数返回规则:

  • 函数必须保留所有寄存器,但eax、ecx和edx除外(可在函数调用中更改),esp(必须根据调用约定进行更新)
  • 如果结果为32位或更小,则eax寄存器为返回值。如果结果为64位,则结果存储在edx:eax中。

x86体系结构上使用的调用约定:

  • Win32(__stdcall)
    函数参数在堆栈上传递,从右向左推送,被调用方清理堆栈。
  • 本机C++方法调用(也称为thiscall)
    函数参数在堆栈上传递,从右向左推送,"this"指针在ecx寄存器中传递,被调用方清理堆栈。
  • COM(适用于c++的__stdcall)
  • __fastcall
    前两个DWORD或较小的参数在ecx和edx寄存器中传递,其余参数在堆栈上传,从右向左推送。被调用方清理堆栈。
  • __cdecl
    函数参数在堆栈上传递,从右向左推送,被调用方清理堆栈。__cdecl调用约定用于具有可变长度参数的所有函数。

x86标志位

flag寄存器各位示意图
(图片引用自:https://blog.csdn.net/weixin_46013401/article/details/111823010)

标志
代码
标志名称状态与说明其它
OFOverflow Flag
溢出标志
0
1
nv-No overflow(无溢出)
ov-Overflow(溢出)
有符号数
DFDirection Flag
方向标志
0
1
up-Direction up(递增,低往高)
dn-Direction down(递减,高往低)
仅仅用于串处理指令中,
控制SI、DI的改变方向
CLD指令:将DF置为0
STD指令:将DF置为1
IFInterrupt Flag
中断标志
0
1
di-Interrupts disabled(禁用中断)
ei-Interrupts-enabled(启用中断)
STI指令:将IF设置为1
CLI指令:将IF设置为0
SFSign Flag
符号标志
0
1
pl-Positive(or zero)正或零
ng-Negative(负数)
结果为负数,则SF=1
结果为非负,则SF=0
ZFZero Flag
零标志
0
1
nz-Nonzero(非零)
zr-Zero(零)
结果为零,则ZF=1
结果为非零,则ZF=0
AFAuxiliary Carry Flag
辅助进位标志
0
1
na-No auxiliary carry(无辅助进位)
ac-Auxiliary carry(辅助进位)
反映加减运算时最低半字节有无进位或者借位
最低半字节有进位或借位时,AF=1,
否则AF=0。
PFParity Flag
奇偶标志
0
1
pe-Parity even(奇)
po-Parity odd(偶)
所有bit位中的1的个数是否为偶数
偶数:则PF=1,奇数:则PF=0
CFCarry Flag
进位标志
0
1
nc-No carry(无进位)
cy-Carry(有进位)
无符号数
有进位或借位时CF=1,否则为0
TFTrap Flag
跟踪标志
0
1
0-正常状态
1-单步状态
是否允许单步中断
ioplI/O Privilege Level
00~11操作系统用来控制对硬件的访问

用"r"命令查看或更改标志位的值

条件Conditions

条件描述一个或多个标志的状态。
汇编程序使用一个或两个字母缩写来表示条件。

条件名称标志说明
ZZF=1最后一个操作的结果为零
NZZF=0最后一个操作的结果不为零
CCF=1最后一个操作进位或借位(对于无符号整数,表示溢出)
NCCF=0最后一个操作不需进位或借位
SSF=1最后一个操作具有高位集
NSSF=0最后一个操作没有高位集
OOF=1当视为有符号整数运算时,最后一个运算导致溢出
NOOF=0当视为有符号整数运算时,最后一个运算没有溢出

条件还可以用于比较两个值。cmp指令比较其两个操作数,然后设置标志,类似从一个操作数减去一个操作数。

条件名称标志CMP操作后的含义
EZF=1value1 == value2
NEZF=0value1 != value2
GE、NLSF=OFvalue1 >= value2(有符号整数)
LE、NGZF=1 or SF!=OFvalue1 <= value2(有符号整数)
G、NLEZF=0 and SF=OFvalue1 > value2 (有符号整数)
L、NGESF!=OFvalue1<value2(有符号整数)
AE、NBCF=0value1 >= value2 (无符号整数)
BE、NACF=1 or ZF =1value1 <= value2(无符号整数)
A、NBECF=0 and ZF=0value1 > value2 (无符号整数)
B、NAECF=1value1 < value2 (无符号整数)

条件通常用于处理cmp 或 test 指令的结果。

数据类型

  • byte:8 bits
  • word:16 bits
  • dword:32 bits
  • qword:64 bits(包括浮点双精度)
  • tword:80 bits(包括浮点扩展双精度)
  • oword:128 bits

符号

表示法含义
r,r1,r2…寄存器
m内存地址
#n即时常量
r/m寄存器或内存地址
r/#n寄存器或即时常量
r/m/#n寄存器/内存地址/即时常量
cc条件代码
T“B”,“W” or “D” (byte,word,dword)
accTT大小的累加器
T=“B”,则为al;T=“W”,为ax;T=“D”,为eax

寻址模式

采用 T PTR [expr]的形式寻址,其中T是某种数据类型,expr是涉及常量和寄存器的一些表达式。
图片来源出网络
图片来源于网络
引用:
https://learn.microsoft.com/zh-cn/windows-hardware/drivers/debugger/x86-architecture
https://blog.csdn.net/weixin_46013401/article/details/111823010

相关文章:

x86体系结构(WinDbg学习笔记)

寄存器 eaxAccumulator累加器ebxBase register基寄存器ecxCounter register计数器寄存器edxData register - can be used for I/O port access and arithmetic functions数据寄存器-可用于I/O端口访问和算术函数esiSource index register源索引寄存器ediDestination index reg…...

Hadoop的第二个核心组件:MapReduce框架第四节

Hadoop的第二个核心组件&#xff1a;MapReduce框架 十、MapReduce的特殊应用场景1、使用MapReduce进行join操作2、使用MapReduce的计数器3、MapReduce做数据清洗 十一、MapReduce的工作流程&#xff1a;详细的工作流程第一步&#xff1a;提交MR作业资源第二步&#xff1a;运行M…...

算法通关村第十九关——最少硬币数

LeetCode322.给你一个整数数组 coins,表示不同面额的硬币&#xff0c;以及一个整数 amount&#xff0c;表示总金额。计算并返回可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额&#xff0c;返回-1。你可以认为每种硬币的数量是无限的。 示例1&…...

Linux ifconfig只显示 lo 网卡,没有ens网卡解决方案

项目场景&#xff1a; 虚拟机中linux无网络问题 问题描述 之前在调试linux的时候&#xff0c;由于一些不太清楚的误操作&#xff0c;导致ubuntu linux出现无网络问题&#xff0c;现象如下 ifconfig 只显示了 lo 网卡 lo 网卡&#xff1a;它是本地环回接口。 这意味着您的虚…...

Java复习-26-枚举

枚举&#xff08;替换多例设计&#xff09; 目的&#xff08;使用场景&#xff09; 不用也没啥 定义一个描述性别的类&#xff0c;那么该对象只有两个:男、 女。或者描述颜色基色的类&#xff0c;可以使用: 红色、绿色、蓝色。 功能 用于定义有限个数对象的一种结构&#x…...

NLP(六十八)使用Optimum进行模型量化

本文将会介绍如何使用HuggingFace的Optimum&#xff0c;来对微调后的BERT模型进行量化&#xff08;Quantization&#xff09;。   在文章NLP&#xff08;六十七&#xff09;BERT模型训练后动态量化&#xff08;PTDQ&#xff09;中&#xff0c;我们使用PyTorch自带的PTDQ&…...

Tomcat多实例和负载均衡动静分离

目录 一、Tomcat多实例部署 二、负载均衡动静分离 2.1.动静分离 2.11 nginx负载均衡 192.168.30.203 2.22 Tomcat服务器&#xff1a;192.168.30.200&#xff1a;80 2.23 Tomcat服务器&#xff1a;192.168.30.100&#xff1a;80 2.24 配置nginx 192.168.30.203静态页面 2…...

企业ERP和泛微OA集成场景分析

轻易云数据集成平台&#xff08;qeasy.cloud&#xff09;为企业ERP和泛微OA系统提供了强大的互通解决方案&#xff0c;特别在销售、采购和库存领域的单据审批场景中表现出色。这些场景涉及到多个业务单据的创建和审批&#xff0c;以下是一些具体的应用场景描述&#xff1a; 采购…...

31 WEB漏洞-文件操作之文件包含漏洞全解

目录 文件包含漏洞原理检测类型利用修复 本地包含-无限制&#xff0c;有限制远程包含-无限制&#xff0c;有限制各种协议流玩法文章介绍读取文件源码用法执行php代码用法写入一句话木马用法每个脚本支持的协议玩法 演示案例某CMS程序文件包含利用-黑盒CTF-南邮大&#xff0c;i春…...

qmake.exe xxx.pro -spec win32-g++ 作用

作用 qmake.exe xxx.pro -spec win32-g的作用是使用win32-g构建系统规范来生成针对xxx.pro项目的构建脚本。 具体来说&#xff0c;这个命令的含义如下&#xff1a; qmake.exe&#xff1a;使用qmake命令行工具。xxx.pro&#xff1a;指定了要构建的项目文件&#xff0c;.pro文…...

SpringMVC实现增删改查

文章目录 一、配置文件1.1 导入相关pom依赖1.2 jdbc.properties&#xff1a;配置文件1.3 generatorConfig.xml&#xff1a;代码生成器1.4 spring-mybatis.xml &#xff1a;spring与mybatis整合的配置文件1.5 spring-context.xml &#xff1a;上下文配置文件1.6 spring-mvc-xml:…...

React 配置别名 @ ( js/ts 项目中通过 webpack.config.js 配置)

一、简介 在 Vue 项目当中&#xff0c;可以使用 来表示 src/&#xff0c;但在 React 项目中&#xff0c;默认却没有该功能&#xff0c;因此需要进行手动的配置来实现该功能。 别名主要解决的问题&#xff1a;每个页面都使用路径的方式进行引入&#xff0c;这样很麻烦&#xff…...

Android 在TextView前面添加多个任意View且不影响换行

实现效果如下&#xff1a; 如上&#xff0c;将头像后面的东西看作一个整体&#xff0c;因为不能影响后面内容的换行&#xff0c;且前面控件的长度是可变的&#xff0c;所以采用自定义View的方法来实现&#xff1a; /*** CSDN深海呐 https://blog.csdn.net/qq_40945489/articl…...

字符串相加

给定两个字符串形式的非负整数 num1 和num2 &#xff0c;计算它们的和并同样以字符串形式返回。 你不能使用任何內建的用于处理大整数的库&#xff08;比如 BigInteger&#xff09;&#xff0c; 也不能直接将输入的字符串转换为整数形式。 示例 1&#xff1a; 输入&#xff…...

uni-app直播从0到1实战

1.安装开发工具 2.创建项目 参考&#xff1a;uniapp从零到一的学习商城实战_云澜哥哥的博客-CSDN博客...

Python UI自动化 —— pytest常用运行参数解析、pytest执行顺序解析

pytest常用Console参数&#xff1a; -v 用于显示每个测试函数的执行结果-q 只显示整体测试结果-s 用于显示测试函数中print()函数输出-x 在第一个错误或失败的测试中立即退出-m 只运行带有装饰器配置的测试用例-k 通过表达式运行指定的测试用例-h 帮助 首先来看什么参数都没加…...

LeetCode刷题笔记【25】:贪心算法专题-3(K次取反后最大化的数组和、加油站、分发糖果)

文章目录 前置知识1005.K次取反后最大化的数组和题目描述分情况讨论贪心算法 134. 加油站题目描述暴力解法贪心算法 135. 分发糖果题目描述暴力解法贪心算法 总结 前置知识 参考前文 参考文章&#xff1a; LeetCode刷题笔记【23】&#xff1a;贪心算法专题-1&#xff08;分发饼…...

java基础面试题 第四天

一、java基础面试题 第四天 1. String 为什么不可变&#xff1f; **不可变对象&#xff1a;**不可变对象在java中就是被final修饰的类就称为不可变对象&#xff0c;具体含义是&#xff0c;不可变对象一但被赋值以后&#xff0c;他的引用地址就不能被修改&#xff08;它的属性…...

postgresql-常用日期函数

postgresql-常用日期函数 简介计算时间间隔获取时间中的信息截断日期/时间创建日期/时间获取系统时间时区转换 简介 PostgreSQL 提供了以下日期和时间运算的算术运算符。 获取当前系统时间 select current_date,current_time,current_timestamp ;-- 当前系统时间一周后的日…...

【业务场景】用户连点

处理用户连点 1.时间戳处理 思路&#xff1a;通过检查当前时间和上一次触发事件的时间之间的间隔&#xff0c;判断是否允许继续执行。 代码如下&#xff1a; // clickThrottle.js /* 防止重复点击 */ let clickTimer 0function clickThrottle(interval 3000) {let now n…...

zabbix企业微信告警

目前&#xff0c;企业微信使用要设置可信域名 华为云搜索云函数 创建函数 选择http函数&#xff0c;随便输入函数名字 回到函数列表&#xff0c;选择刚创建的函数&#xff0c;创建触发器&#xff0c;安全模式选择none 点击右上角管理 选刚创建的api&#xff0c;右边操作点…...

(高频面试1)Redis缓存穿透、缓存击穿、缓存雪崩

目录 一&#xff1a;缓存数据 1.1 应用场景 1.2&#xff1a;缓存数据出现的问题 1.2.1 缓存穿透 1.2.2 解决办法 1.2.3 缓存击穿 1.2.4 解决办法 1.2.5 缓存雪崩 1.2.6 解决办法 一&#xff1a;缓存数据 1.1 应用场景 数据库查询结果缓存是一种常见的缓存应用场景&a…...

c++推箱子小游戏

上代码: #include <stdio.h> #include <stdlib.h> #include <conio.h>int map[2][7][8] {//0:空的 1:■ :墙//3&#xff1a;☆ 4&#xff1a;★ //目的地和箱子//5&#xff1a;※ //人//7:⊙ //目的(3)和箱子(4)在一起//8&#xff1a;※ //人(5…...

SpringMVC:从入门到精通

一、SpringMVC是什么 SpringMVC是Spring提供的一个强大而灵活的web框架&#xff0c;借助于注解&#xff0c;Spring MVC提供了几乎是POJO的开发模式【POJO是指简单Java对象&#xff08;Plain Old Java Objects、pure old java object 或者 plain ordinary java object&#xff0…...

jmeter 数据库连接配置 JDBC Connection Configuration

jmeter 从数据库获取变量信息 官方文档参考&#xff1a; [jmeter安装路径]/printable_docs/usermanual/component_reference.html#JDBC_Connection_Configuration 引入数据库连接&#xff1a; 将MySQLjar包存放至jemter指定目录&#xff08;/apache-jmeter-3.3/lib&#xff09…...

TVC广告片制作成本多少

电视是广告传播的主要媒介之一&#xff0c;具有广泛的受众群体和较高的覆盖率。通过在电视上播放广告片&#xff0c;企业可以将产品或者服务的信息传达给大量潜在客户&#xff0c;提高知名度和曝光度。接下来由深圳TVC广告片制作公司老友记小编从以下几个方面浅析制作一条TVC广…...

【Express.js】代码规范

代码规范 编程规范&#xff0c;对于一个优秀的项目是不可或缺的&#xff0c;有了良好的代码规范&#xff0c;有益于项目的维护与拓展。 命名规范 命名的第一要义是明了&#xff0c;要让阅读者看到命名就能大概猜测出其意义或用处。 以用户身份&#xff08;userRole&#xff…...

Vue2+Vue3基础入门到实战项目(前接六 副线一)—— 面经 项目

day1 接口文档地址&#xff1a;https://www.apifox.cn/apidoc/project-934563/api-20384515 一、项目功能演示 1.目标 启动准备好的代码&#xff0c;演示移动端面经内容&#xff0c;明确功能模块 2.项目收获 二、项目创建目录初始化 vue-cli 建项目 1.安装脚手架 (已安装…...

QT tcpserver

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);// 服务端有QTcpServer库&#xff0c;封装了监听操作server new QTcpServer();// 直接监听&#xff0c;内部根…...

Android adb shell svc 知识详解

adb shell svc 详解 文章目录 adb shell svc 详解一、svc 常用命令&#xff1a; 二、svc 命令和使用示例&#xff1a;查看系统是否安装了svc1、svc2、svc help3、svc power svc wifi has been migrated to WifiShellCommand,simply perform translation to cmd wifi set-wifi-e…...

医院网站建设需求分析/百度影音在线电影

2019独角兽企业重金招聘Python工程师标准>>> 一&#xff0e;标识符 二&#xff0e;关键字 三&#xff0e;JAVA基础数据类型 3.1. java常量 3.2. java变量 从本质上来讲&#xff0c;变量其实是内存里面的一小块区域&#xff0c;一个程序在运行的时候&#xff0c;实际…...

天河区建设和水务局网站/东莞网站推广的公司

NVIDIA GeForce GTX1050ti显卡驱动是一款非常不错的显卡驱动应用,这个显卡对新的游戏有着良好的兼容性,适用于所有的win7、win10各个版本,且玩游戏不会出现任何的黑屏现象,大型游戏运行起来也非常流畅。快来下载吧! 显卡说明 从参数对比来看,GTX1050 Ti配备了更高规格的架…...

点对点视频网站开发/新闻网最新消息

名字和id在之前的例子中我们看到了一些方法可以获得线程的名字的方法&#xff0c;构造方法中也出现了给线程命名的方法。我们举个例子。public class Main {public static void main(String[] args){Thread thread1new Thread(new TheThread(),"thread1");Thread thr…...

哪家网站建设公司靠谱/专业关键词优化平台

今天在看王爽的《汇编语言》&#xff0c;看到地址总线的时候&#xff0c;由于那个图画的是并行传输&#xff0c;于是我就去搜了下地址总线是不是并行总线&#xff0c;结果看到一篇文章说现在串行总线的传输速度比并行总线要快&#xff0c;我就奇怪了。 在我的印象中&#xff0c…...

谁有做网站比较厉害的/青岛seo排名扣费

overflow属性规定当内容溢出元素框时发生的事情。 visible:默认值。内容不会被修剪&#xff0c;会呈现在元素框之外。 hiddle:若内容溢出会被修剪&#xff0c;且其余内容是不可见的 scroll:若内容溢出会被修剪&#xff0c;但是浏览器会显示滚动条以便查看其余的内容。当内容没有…...

微网站是什么意思/账号seo是什么

数组名的指针&#xff0c;即数组首元素地址的指针。即是指向数组的指针。 例&#xff1a;int (*p)[10]; p即为指向数组的指针&#xff0c;又称数组指针。 编辑本段数组指针与指针数组 数组指针是指向数组首元素的地址的指针&#xff0c;其本质为指针&#xff1b; 指针数组是数组…...