VisualStudio反汇编功能使用

VisualStudio反汇编功能使用

使用方法

到达断点时:Ctrl+K(松开)+G(后按)唤出反汇编界面,就可以看到当前代码对应的汇编语言了

注意:进入反汇编窗口后可以F10单次调试一条汇编指令
在这里插入图片描述

其他:

  • 打开调试-窗口-寄存器 可以查看寄存器数值
    在这里插入图片描述
  • 打开调试-窗口-内存 可以查看内存数值,支持搜索,将反汇编中的地址拷贝进搜索框可以定位你想要查看的内存地址的值
    在这里插入图片描述

搭配食用为佳

常用寄存器

详见*X86-64寄存器介绍
在这里插入图片描述

windows X86寄存器命名规则

r前缀:64位寄存器

e前缀:32位寄存器

后缀L:集群从的低八位

后缀H:寄存器的9~16位

既然这样,那就只讨论中间的名字,不考虑前后缀,看有哪些寄存器

寄存器分类(大小为16位)

通用寄存器

ax:accumulator register 累加寄存器

bx:base register 基址寄存器 存访问地址

cx:count register 计数寄存器

dx:data register 数据寄存器

索引寄存器

bp:base pointer 基址指针 用来定位栈底

sp:stack pointer 栈指针,栈寄存器的偏移量,用来定位栈顶

si:source index 变址寄存器 拷贝源字符串

di:destination index 目标变址寄存器 复制目标字符串

控制寄存器

ip:instruction pointer 只读的指令寄存器指针 不可拆分 记录下一条指令位置

flag:储存当前状态,详见寄存器详解

普通寄存器

r8~r15 可根据无\D\W\B后缀来分割为更小的寄存器,最大64位(8B)

ymm0~ymm15 存储双精度和单精度浮点数,最大256位(32B),能放4个双精度,8个单精度,一个ymm寄存器可以拆分成两个xmm

寄存器分类(大小为8位)

遵循前面提到的前后缀规则,16位寄存器可以分为两个8位寄存器:

ah、al

bh,bl

ch,cl

dh,dl

寄存器分类(大小为32位)

eax,ebx,ecx,edx

寄存器分类(大小为64位)

rax, rbx, rcx, rdx

常用指令

mov:move data 移动数据 movz,movs是0扩展和符号扩展指令,将较小的数从寄存器或内存转移到寄存器中

lea destination, source:load effective address 加载有效地址 是mov指令的变形

详见:

X86汇编指南

其他资料

寻址方式
反汇编分析
反汇编分析类和对象

指令翻译(仅供参考)

尝试把下面的指令翻译出来
在这里插入图片描述

lea rcx, [rbp+104h]     将内存中[rbp+104h](栈底地址+104h,h说明是16进制)的数据放入rcx寄存器
call                    通过构造函数Cat的函数指针07FF66A1F11B3h进行调用
mov eax,dword ptr [rax] 将rax寄存器的一个double word指针指向的内容移动到eax
mov dword ptr [c], eax  将eax的值移到内存单元c中一个double word指针的位置

lea rcx,[c]             将内存单元c的数据取出并放入rcx中
call                    通过isAnimal的函数指针调用该函数

mov ecx 4               将立即数4移入ecx寄存器
call                    调用new运算符
mov qword ptr [rbp+148h],rax 将rax的值移入[rbp+148h]的内存位置
cmp qword ptr [rbp+148h],0   检查[rbp+148h]的内存位置数是否为0
je                           相等则跳转到该地址:stack初始化地址+78h
mov rcx,qword ptr [rbp+148h] 把内存[rbp+148h]的数据移动到rcx中
call                         通过构造函数Cat的函数指针07FF66A1F11B3h进行调用
mov qword ptr [rbp+158h],rax 将rax的值移入[rbp+158h]的内存位置
jmp                          无条件跳转到stack初始化地址+83h

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/230393.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【vscode写vue代码是白色怎么办】

【vscode写vue代码是白色怎么办】 在插件列表中搜索Vetur 安装即可

linux虚拟机Virtualbox的下载安装及vagrant镜像下载安装

Virtualbox下载安装以及创建及简单使用一个虚拟机 1.开启电脑cpu虚拟机 以戴尔G3为例 找到电脑设置–>更新与安全–>恢复 这个步骤也可以在电脑开机时一直按键esc(或者F1、或者F2、或者deleete)都可以进入BIOS 进入BIOS 完成以上步骤就可以开启电脑cpu虚拟机了 …

使用Tomcat部署静态项目并处理BUG

--听讲的习惯 Tomcat介绍 tomcat what_Arenaschi的博客-CSDN博客 Tomcat安装及配置教程(超详细) 那些年我们用过的tomcat_Arenaschi的博客-CSDN博客 简单使用tomcat查看版本信息等_windows查看tomcat版本命令-CSDN博客 Tomcat部署html静态网站的五种方…

红海云eHR 任意文件上传漏洞复现

0x01 产品简介 红海eHR是大中型企业广泛采用人力资源管理系统。红海云是国内顶尖的HR软件供应商,是新一代eHR系统的领导者。 0x02 漏洞概述 红海云EHR系统PtFjk.mob接口处存在未授权文件上传漏洞,攻击者可上传webshell来命令执行,获取服务器权限。 0x03 复现环境 FOFA:…

Leetcode 17 电话号码的字母组合

理解题意: 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合 本质上:数字代表着一个字母集合 数字的个数决定了递归的深度,即树的深度 数字代表的字母组合决定了当前树的宽度。 1.暴力回溯 这里没有什么剪枝…

拆解大语言模型 RLHF 中的PPO算法

为什么大多数介绍大语言模型 RLHF 的文章,一讲到 PPO 算法的细节就戛然而止了呢?要么直接略过,要么就只扔出一个 PPO 的链接。然而 LLM x PPO 跟传统的 PPO 还是有些不同的呀。 其实在 ChatGPT 推出后的相当一段时间内,我一直在等…

【数据结构】顺序表的定义和运算

目录 1.初始化 2.插入 3.删除 4.查找 5.修改 6.长度 7.遍历 8.完整代码 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filotimo__✍️原创,首发于CSDN📚。 &…

SpringBoot+线程池实现高频调用http接口并多线程解析json数据

场景 SpringbootFastJson实现解析第三方http接口json数据为实体类(时间格式化转换、字段包含中文): SpringbootFastJson实现解析第三方http接口json数据为实体类(时间格式化转换、字段包含中文)-CSDN博客 Java中ExecutorService线程池的使用(Runnable和Callable多…

swiftUi——颜色

在SwiftUI中,您可以使用Color结构来表示颜色。Color可以直接使用预定义的颜色,例如.red、.blue、.green等,也可以使用自定义的RGB值、十六进制颜色代码或者系统提供的颜色。 1. 预定义颜色 Text("预定义颜色").foregroundColor(.…

使用STM32 HAL库进行GPIO控制的实例

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进, 代码获取、问题探讨及文章转载可私信。 ☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。 🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!…

人工智能学习9(LightGBM)

编译工具:PyCharm 文章目录 编译工具:PyCharm lightGBM原理lightGBM的基础使用案例1:鸢尾花案例2:绝对求生玩家排名预测一、数据处理部分1.数据获取及分析2.缺失数据处理3.数据规范化4.规范化输出部分数据5.异常数据处理5.1删除开…

调用win32 api获取电脑名字和系统目录

学习一下几个函数的功能,和调用方式; void CBasenameView::OnDraw(CDC* pDC) {CBasenameDoc* pDoc GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereCString str1;TCHAR myname1[50], myname2[50], mydirname1[50], myd…

class061 最小生成树【算法】

class061 最小生成树【算法】 2023-12-8 11:48:12 算法讲解061【必备】最小生成树 code1 P3366 【模板】最小生成树 // Kruskal算法模版(洛谷) // 静态空间实现 // 测试链接 : https://www.luogu.com.cn/problem/P3366 // 请同学们务必参考如下代码中…

实战:Docker Compose 下 Nginx、Java、Mysql 和 Redis 服务协同部署(包含解决浏览器访问Linux部署服务器本地资源问题)

1. 背景 在该实战中,我们将探讨如何使用Docker Compose协同部署Nginx、Java、Mysql和Redis服务,实现一个视频上传与展示的应用。具体需求如下: Java应用负责上传视频和图片资源到Nginx目录下,作为资源服务器。Nginx服务作为静态…

Redis数据已经删除了,为什么内存占用还是很高?

Redis数据已经删除了,为什么内存占用还是很高? Redis做了数据删除操作,为什么使用top命令时,还是显示Redis占了很多内存? 没做相关功课的人觉得这个问题有问题,删了数据还说占着内存,面试官不…

ubuntu22.04 安装cuda

CUDA(Compute Unified Device Architecture)是由 NVIDIA 开发的一种并行计算平台和编程模型。它允许开发者利用 NVIDIA 的 GPU(图形处理单元)进行高效的计算处理。CUDA 通过提供一系列的 C、C 和 Fortran 扩展,使得开发…

Navicat 技术指引 | 连接 GaussDB 分布式

Navicat Premium(16.3.3 Windows 版或以上)正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能,还提供强大的高阶功能(如模型、结…

小程序开发要多少钱

随着智能手机的普及和人们对移动应用的需求不断增长,小程序作为一种轻量级应用形式,在商业领域中备受关注。众多企业都渴望抓住这一机遇,但他们最关心的问题之一是:小程序开发需要多少钱? 一、开发方式选择 在开始小…

【LuatOS】笔记(二)基础框架

开发环境搭建 合宙官方搭建的是:vscodeLuatOS-SOC推荐拓展包(vscode插件),原文链接:LuatOS开发环境搭建。安装完创建项目文件,创建main.lua文件,就可以开始编写了。 函数与使用 LuatOS-SOC接口文档1,该文档…

MongoDB的插入文档、更新文档语句

本文主要介绍MongoDB的插入文档、更新文档语句。 目录 MongoDB插入文档MongoDB更新文档 MongoDB插入文档 在MongoDB中,可以通过使用insertOne或insertMany方法向集合中插入文档。 insertOne方法可以插入一个文档,例如: db.collection.inse…
最新文章