结构体反汇编解析

news2024/10/7 16:19:40

代码如下

#include<iostream>
using namespace std;
typedef struct Role {
	int HP;
	int MP;
}*PRole;
int main() {
	Role user;
	PRole puser;
	puser = &user;
	puser->HP = 1500;
	puser->MP = 2000;
	user.HP = 2500;
	user.MP = 3000;
	return 0;
}

基础知识

如果是地址就是采用箭头,箭头是偏移的意思,就像x86内核要取出寄存器的信息,定义一个结构体,然后用偏移来访问各个寄存器的值

实体取出值就是按点(.)来访问

反汇编代码

发现在定义结构体的部分是没有汇编代码的

原因:只有在定义这个结构体变量时候,编译器就去看这个结构体的定义,然后结构体都是基础数据类型组成的,占用内存的大小都是确定的,所以可以通过偏移来访问结构体的成员

	Role user;
	PRole puser;
	puser = &user;
00007FF6EC26185D  lea         rax,[user]  //将user的地址放到rax中
00007FF6EC261861  mov         qword ptr [puser],rax //将user的地址给puser地址指向的内存

可能是现在vscode编辑器的优化,把一些压栈的操作给忽略了,所以更加直白一些

	puser->HP = 1500;
00007FF6EC261865  mov         rax,qword ptr [puser]  //将user地址给到rax,puser是通过栈拿的
00007FF6EC261869  mov         dword ptr [rax],5DCh  //给结构体第一个元素赋值,就像数组一样数组名是第一个元素的地址
	puser->MP = 2000;
00007FF6EC26186F  mov         rax,qword ptr [puser]  //和上面同理
00007FF6EC261873  mov         dword ptr [rax+4],7D0h  //给结构体第二个元素赋值,偏移4个字节,内存中偏移
	user.HP = 2500;
00007FF6EC26187A  mov         dword ptr [user],9C4h  //给结构体第一个元素赋值
	user.MP = 3000;
00007FF6EC261881  mov         dword ptr [rbp+0Ch],0BB8h  //给结构体第二个元素赋值,栈偏移,通过栈来拿这个局部变量

还有一种情况

PRole puser = new Role,这是将在堆中创建了两个int变量,然后puser指向第一个int变量

	Role user;
	PRole puser;
	puser = new Role;
00007FF7B032198C  mov         ecx,8  
00007FF7B0321991  call        operator new (07FF7B032103Ch)  
00007FF7B0321996  mov         qword ptr [rbp+108h],rax  
00007FF7B032199D  mov         rax,qword ptr [rbp+108h]  
00007FF7B03219A4  mov         qword ptr [puser],rax  
	user.HP = 2500;
00007FF7B03219A8  mov         dword ptr [user],9C4h  
	user.MP = 3000;
00007FF7B03219AF  mov         dword ptr [rbp+0Ch],0BB8h

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于Centos 7/8 网络设置 与工具连接

网络三步曲的配置 1、首先更改虚拟机的网络配置 查看子网地址以及网关 如果有要求需要更改IP地址&#xff0c;规定第三位是指定数值&#xff0c;那么需要全部更改 例如&#xff0c;IP地址为192.168.200.30 其中200为重点&#xff0c;更改时为以下步骤 1、点击DHCP设置&#x…

红米1s 刷入魔趣 (Mokee)ROM(Android 7.1)

目录 背景准备工具硬件&#xff08;自己准备&#xff09;软件&#xff08;我会在文末提供链接&#xff09; 刷机步骤1. 重启电脑2. 安装驱动3. 刷入TWRP4. 清空数据5. 刷入魔趣6. 开机 结尾下载链接 本文由Jzwalliser原创&#xff0c;发布在CSDN平台上&#xff0c;遵循CC 4.0 B…

云计算技术概述_1.云计算相关概念

1.关于IBM“蓝云&#xff08;Blue Cloud&#xff09;”计划 IBM 推出的“蓝云&#xff08;Blue Cloud&#xff09;”计划为客户带来即可使用的云计算(Cloud Computing)。它包括一系列的云计算产品&#xff0c;使计算不仅仅局限在本地机器或远程Server Farms&#…

GPT3 终极指南(一)

原文&#xff1a;zh.annas-archive.org/md5/6de8906c86a2711a5a84c839bec7e073 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 前言 GPT-3&#xff0c;或者说是 Generative Pre-trained Transformer 3&#xff0c;是由 OpenAI 开发的基于 Transformer 的大型语言模型…

【R语言数据分析】数据类型与数据结构

R的数据类型有数值型num&#xff0c;字符型chr&#xff0c;逻辑型logi等等。 R最常处理的数据结构是&#xff1a;向量&#xff0c;数据框&#xff0c;矩阵&#xff0c;列表。 向量有数值型向量&#xff0c;字符型向量&#xff0c;逻辑型向量等&#xff0c;字符型向量就是反应…

书生·浦语 大模型(学习笔记-9)OpenCompass 大模型评测实战

目录 一、评测实现双赢 二、评测遇到的问题 三、如何评测大模型&#xff08;大概总结4大类方法&#xff09; 四、评测工具链及流水线 五、实战评测 GPU的环境安装 查看支持的数据集和模型 启动评测(会缺少protibuf库&#xff0c;提前安装&#xff09; 测评结果 一、评…

【linux学习指南】linux 环境搭建

文章目录 &#x1f4dd;前言&#x1f320; 云服务器的选择&#x1f320;阿里云&#x1f320;腾讯云&#x1f320;华为云 &#x1f320;使用 XShell 远程登陆到 Linux&#x1f309;下载 XShell &#x1f320;查看 Linux 主机 ip&#x1f309; XShell 下的复制粘贴&#x1f309; …

Linux下安装snaphu

1、官网下载安装包 2、解压&#xff0c;移动文件夹到/usr/local/下 3、在/usr/local/下创建man&#xff0c;在man下创建man1文件夹 4、进入到snaphu的src文件夹里&#xff0c;执行sudo make&#xff0c;如果报错 在这个 Makefile 中&#xff0c;-arch x86_64 是 macOS 特定的…

ai口语软件有合适的吗?分享4款!

在全球化日益深入的今天&#xff0c;英语作为国际通用语言&#xff0c;其重要性不言而喻。然而&#xff0c;传统的英语学习方式往往枯燥无味&#xff0c;难以持续。幸运的是&#xff0c;随着人工智能技术的快速发展&#xff0c;AI英语口语软件应运而生&#xff0c;为语言学习者…

PHP算命源码_最新测算塔罗源码_可以运营

众筹商城源码 众筹商品平台 商城加共识元富之路 网上商城众筹 前端是编译后的&#xff0c;后端PHP&#xff0c;带商城 运行截图 源码贡献 https://githubs.xyz/boot?app39 部分数据库表 CREATE TABLE ti_shopro_store (id int(11) NOT NULL AUTO_INCREMENT COMMENT ID,nam…

区块链论文总结速读--CCF B会议 ICDCS 2023 共8篇

Conference&#xff1a;IEEE 43rd International Conference on Distributed Computing Systems (ICDCS) CCF level&#xff1a;CCF B Categories&#xff1a;Computer Architecture/Parallel and Distributed Computing/Storage Systems 计算机体系结构/并行与分布计算/存储…

网络应用层之(6)L2TP协议详解

网络应用层之(6)L2TP协议 Author: Once Day Date: 2024年5月1日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文档可参考专栏&#xff1a;通信网络技术_Once-Day的…

全国产化BMC子卡详细介绍

一款基于全国产的BMC子卡&#xff0c;可实现ChMC/IPMC功能。子卡遵循IPMI 1.5/2.0协议规范&#xff0c;也支持客制OEM命令。子卡可获取载板板卡环境信息&#xff0c;板卡属性信息和板卡状态信息等&#xff0c;其中包括温度、电压、电流等信息&#xff1b;FRU、系统版本、CPU型号…

Kubernetes 弃用Docker后 Kubelet切换到Containerd

containerd 是一个高级容器运行时&#xff0c;又名 容器管理器。简单来说&#xff0c;它是一个守护进程&#xff0c;在单个主机上管理完整的容器生命周期&#xff1a;创建、启动、停止容器、拉取和存储镜像、配置挂载、网络等。 containerd 旨在轻松嵌入到更大的系统中。Docke…

Python数据分析系列(二):python基础

文章目录 前言一、条件语句1、if 语句2、else 语句3、elif 语句4、条件嵌套练习题二、循环语句1、for循环2、while循环3、循环中的break/continue和else、passbreakcontinueelsepass4、循环与递归练习题三、python函数1、自定义函数2、lambda函数(匿名函数)3、常用标准库函数…

YOLOv5训练结果分析

本文的目的是帮助理解每次训练后&#xff0c;在runs/train文件夹下出现的一系列文件&#xff0c;并探索如何评估准确率以及模型的好坏。 一.混淆矩阵—confusion_matrix.png 毕设跑的train有混淆矩阵&#xff0c;但是有点扯&#xff0c;需要跑一下鸟类的验证一下(待验证) 1.概…

吴恩达2022机器学习专项课程(一)8.2 解决过拟合

目录 解决过拟合&#xff08;一&#xff09;&#xff1a;增加数据解决过拟合&#xff08;二&#xff09;&#xff1a;减少特征特征选择缺点 解决过拟合&#xff08;三&#xff09;&#xff1a;正则化总结 解决过拟合&#xff08;一&#xff09;&#xff1a;增加数据 收集更多训…

python web开发开源规范

Hello , 大家好。首先在五一假期给所有劳动者创造者们送上祝福&#xff0c; 本文聊聊我对python web开源相关的规范 PEP 8 Python编程风格指南:PEP 8是Python编程的官方风格指南&#xff0c;提供了关于代码格式、命名规范、注释等方面的建议。遵循PEP 8可以使代码更易于阅读和…

Spring Data JPA数据批量插入、批量更新真的用对了吗

Spring Data JPA系列 1、SpringBoot集成JPA及基本使用 2、Spring Data JPA Criteria查询、部分字段查询 3、Spring Data JPA数据批量插入、批量更新真的用对了吗 前言 在前两篇文章已经介绍过&#xff0c;在使用Spring Data JPA时&#xff0c;DAO层的Respository通过继承J…

【PHP】安装指定版本Composer

1、下载指定版本composer.phar文件&#xff1a;https://github.com/composer/composer/releases 2、将下载的文件添加到全局路径&#xff1a; sudo mv composer.phar /usr/local/bin/composer 3、赋予权限&#xff1a; sudo chmod x /usr/local/bin/composer 4、查看compos…