计算机组成原理实验三-修改二进制文件的程序改变最终运行结果

news2024/11/18 11:24:39

实验资料:
https://wwpv.lanzoue.com/b05drr8qh
密码:6wjx

计算机组成原理实验三 修改二进制文件的程序改变最终运行结果

复习实验二GCC选项:-E -S -c -o -v

.\gcc.exe 1.c  -> a.exe   .\gcc.exe 1.c -o 21001302xx.exe

(1) 使用objdump.exe -d obj.exe 打印出反汇编内容,可以使用重定向将屏幕打印的内容输出到文本后,再分析。
(2) objdump.exe -x obj.exe:以某种分类信息的形式把目标文件的数据组成输出;<可查到该文件的的所有动态库>

objdump.exe -t obj.exe:输出目标文件的符号表()
objdump.exe -h obj.exe:输出目标文件的所有段概括()
objdump.exe -S obj:输出指定段的信息(反汇编源代码)  【注意当gcc -g编译后才能生效】
-S 尽可能反汇编出源代码,尤其当编译的时候指定了-g这种调试参数时,   效果比较明显。隐含了-d参数。
-l 用文件名和行号标注相应的目标代码,仅仅和-d、-D或者-r一起使用  使用-ld和使用-d的区别不是很大,在源码级调试的时候有用,要求  编译时使用了-g之类的调试编译选项。

详细可参考 objdump命令

例:(1)编译命令:.\gcc.exe -g 1.c -o .\1.exe
(2)反汇编命令: .\objdump.exe -S .\1.exe

  1. 通过编写下面C语言程序,通过objdump.exe工具查看global以及local变量所在的地址(截图),并生成反汇编以及带源码的反汇编文件(截图)。
#include<stdio.h>
int global = 0x88888888; 全局变量
int main()
{
	int local = 0x66666666; 局部变量 栈
	int i,sum=0;
	for(i=1; i<=local;i++)
	{
		sum += i;
	}
	printf("%d\n",sum);
	return 0;
}

注释:

第一小问:
先创建含有题目代码的文件,然后从终端执行指令

gcc -g xxx.c -o xxx.exe
objdump -s xxx.exe > xxx.txt

执行完指令后即可看到 xxx.txt 了,然后用记事本打开该文件
再搜索(快捷键 Ctrl + F)“88888888”,最前面的那个就是全局变量地址了
再搜索(快捷键 Ctrl + F)“66666666”,最前面的那个就是局部变量地址了
第二小问:
在终端执行指令

objdump -S xxx.exe > xxx.txt

执行完指令后即可看到 xxx.txt 了,该文件便是所需要的反汇编文件了

截图参考:全局变量地址
局部变量地址
反汇编

  1. 下载附件中的“2100130499VIP.exe”。安装并使用ultraEdit软件,强制将修改文件中的if…else分支语句,将”2100130499普通会员”修改成“你自己的学号VIP”,并截图在ultraEdit软件修改的部分(用红色框框定),以及在DOS中修改前1次及修改后2次的运行截图。
    附件: 2100130499VIP.exe
    截图要求
    要求:尽量多的说明你修改的方法,并对修改细节进行截图:

答:先在用UltraEdit打开2100130499VIP.exe文件,由于字符串的存储方式是ASCⅡ,直接搜索(快捷键 Ctrl + F)2100130499,然后修改为 “自己的学号”。

搜索

再搜索字符串2100130499common,将其修改为 “自己的学号 + VIP” 后面的三个字符修改为0,然后就修改完成了。

搜索
注意

  1. 下载附件中的“3-2.exe”(可参考objdump -S的部分反汇编出源代码文件 3-2-g-part.txt)。安装并使用ultraEdit软件,强制将修改文件中的某些数值或者分支语句。
    附件:3-2.exe、3-2-g-part.txt
    运行截图
    要求:
    (1) 要求能小于等于13轮击败敌人。尽量多的说明你修改的方法,并对修改细节用红色框框定以及运行结果进行截图:
    (2) 截图中要先使用3-2.exe lyw打印自己的学号,然后再使用cz或者不加cz运行结果。

提示:C语言初始化的全局
变量保存在统一保存数据段,局部变量保存在栈中,未初始化的全局变量保存在.bss段中。

参考做法(学号以我自己的为例):
(1) 先在用UltraEdit打开3-2.exe文件,查找2100130499的十六进制(7d2d72c3),由于数据是小端存储的,所以实际要查找的字符串为c3722d7d,然后将其替换为自己的学号2100130416(十六进制为7d2d7270),即字符串70722d7d。

替换字符串

(2) 修改第一处:直接修改数值
在源码文件中可以发现输出的是一个变量,而在main中发现就只有一个i变量,所以表示攻击值的变量应该是全局变量,用objdump -s .exe指令找到.data段,就可以发现很熟悉的变量值4了,这个就是攻击力了,然后就用UltraEdit修改这个值就好了。
源码
源码
查找

修改第二处:修改判断语句
通过观察输出内容和源码文件,可以发现这个游戏先会通过x的值来判断VIP等级,那就可以把这个if的判断条件修改一下。最高等级是5级,判断条件是x>=648,大概可以猜到x的值应该是零,那就用UltraEdit将 648(十六进制为0x00000288,但判断语句是按大于来算的,所以应该是0x00000287)的字符串 87 02 00 00修改为 -1 (十六进制为 0xffffffff),如下图.
源码
修改示例

修改第一处运行截图:
运行截图

修改第二处运行截图:
运行截图

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

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

相关文章

Nacos之服务配置中心

1.基础配置 1.1.新建模块cloudalibaba-config-nacos-client3377 1.1.1.POM <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance…

JVM学习(五)

1.1 JVM 类加载机制 JVM 类加载机制分为五个部分&#xff1a;加载&#xff0c;验证&#xff0c;准备&#xff0c;解析&#xff0c;初始化&#xff0c;下面我们就分别来看一下这 五个过程。 1.1.1 加载 加载是类加载过程中的一个阶段&#xff0c; 这个阶段会在内存中生成一…

路径规划算法:基于教与学优化算法的路径规划算法- 附代码

路径规划算法&#xff1a;基于教与学优化优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于教与学优化优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能…

Springcloud1--->负载均衡Ribbon

目录 负载均衡算法负载均衡原理启动两个服务实例开启负载均衡更改Ribbon随机策略 什么是Ribbon&#xff1a; 负载均衡算法 负载均衡算法&#xff1a; 1.轮询法&#xff1a;   将请求按顺序轮流地分配到后端服务器上&#xff0c;它均衡地对待后端的每一台服务器&#xff0c;而…

【正点原子STM32连载】 第十三章 跑马灯实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第十三…

chatgpt赋能Python-python3_9_7怎么用

介绍Python3.9.7及其用途 Python是一种高级编程语言&#xff0c;已成为Web开发、数据科学、机器学习等领域中最广泛使用的语言之一。Python3.9.7是Python的最新版本&#xff0c;于2021年9月6日发布。它包括各种新的特性、改进和安全性实现&#xff0c;提高了Python应用程序的稳…

计算机图形学-GAMES101-13

Ray Tracing &#xff08;1&#xff09;为什么使用光线追踪 Ray Tracing 和 Rasterization 是两种不同的成像方式。Rasterization最大的问题&#xff1a;不利于表达全局效果。整体来说光栅化做阴影是比较困难的。Glossy reflection&#xff1a;一种不那么光滑的反射镜面。Ind…

在 Linux 上使用 yuzu 模拟 Nintendo Switch 试玩王国之泪

王国之泪5月12日发售&#xff0c;DLC 玩家已经造出各种脑洞大开的东西了&#xff0c;但是买的卡带迟迟没有收到&#xff0c;因此&#xff0c;打算使用 yuzu 模拟器先体验一下 yuzu 是一款开源的 Ninetendo Switch 模拟器&#xff0c;支持在 Linux 或者 Windows 平台运行&#…

GoLand 2023 Crack函数的支持

GoLand 2023 Crack函数的支持 增加了对“MIN_BY”和“MAX_BY”函数的支持。 更新了Prisma插件previewFeatures以包含jsonProtocol。 改进了与角度相关的符号的文档-添加了更多关于管道、特性和指令的文档。当您将鼠标悬停在符号上或调用显示文档完成时(F1/CtrlQ)&#xff0c;您…

linux工作目录切换命令文件查看及管理命令

1、查看用户工作目录 2、切换工作目录 这里使用cd命令即可&#xff0c;输入对应的路径就可切换。 如果要返回上一次所处的目录输入 cd - 如果要返回上层目录使用 cd … 返回用户家目录使用 cd ~ 3、查看目录中文件信息命令 使用ls命令可以查看目录中文件信息-a 参数可以…

Windows 和 Linux 环境下 ProtoBuf 的安装

文章目录 一、ProtoBuf 在 Windows 环境中的安装二、ProtoBuf 在 Linux 环境中的安装 ProtoBuf在GitHub上的下载地址 一、ProtoBuf 在 Windows 环境中的安装 首先选择自己要下载的版本&#xff0c;我选择的是v21.11&#xff1a; 点进去在最下面选择Windows的版本&#xff0…

New:dbForge Edge 2023 4in1 Enterprise Edition Crack

dbForge Edge 2023 4in1 Enterprise Edition 赋予自己开发和管理 SQL Server、MySQL、Oracle 和 PostgreSQL 数据库的广泛能力 dbForge Edge&#xff1a;您的终极多数据库解决方案 让我们来看看。您需要处理多个数据库管理系统。同时&#xff0c;您希望能够灵活有效地处理范围广…

jface

JFace 是建立在 SWT 之上的 UI 部件&#xff0c;它是 SWT 的扩展并能和SWT交互。 ApplicationWindow和Action org.eclipse.jface.window.ApplicationWindow; JFace为了简化窗口的设计特别设计了类&#xff0c;比如ApplicationWindow这一个类&#xff0c;它里面包含了六个默认…

5年测试12月被裁,准备3个月终上岸阿里25K,面试时差点被问哭···

我的个人背景非常简单&#xff0c;也可以说丝毫没有亮点。 学历普通&#xff0c;计算机专业二本毕业&#xff0c;毕业后出来就一直在一家小公司&#xff0c;岁月如梭细&#xff0c;算了下至今从事软件测试已经5年了&#xff0c;也点点点了五年&#xff0c;每天都是重复的工作&…

不用再找了,你要的国内好用的ChatGPT网站都在这里

&#x1f4a1; 大家好&#xff0c;我是可夫小子&#xff0c;关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。加&#xff1a;keeepdance&#xff0c;备注&#xff1a;chatgpt&#xff0c;拉你进群。 目录 ChatGPT是什么 OpenAI与ChatGPT的发展历程 AI对话聊天 AI文档…

GWAS分析中的GO和KEGG富集分析

上一次&#xff0c;我们介绍如何根据显著性snp&#xff0c;使用bedtools根据上下游距离&#xff0c;根据gff文件注释基因。 这一次&#xff0c;介绍一下如何根据注释的基因&#xff0c;进行富集分析&#xff0c;主要是看一下GWAS定位的基因有没有某一个趋势&#xff0c;也算是…

Python泰裤辣丨520写一个自动换壁纸软件,将女友照骗放进去送给她

Python泰裤辣!520写一个自动换壁纸软件&#xff0c;将女友照骗放进去送给她! 准备工作1、环境2、使用的模块3、如何配置pycharm里面的python解释器?4、pycharm如何安装插件? 代码实战1、获取壁纸 自动更换壁纸程序最后 话说兄弟们&#xff0c;今天520你们都送给女朋友啥礼物了…

文件上传之,waf绕过(24)

上传参数名解析&#xff1a;明确哪些东西可以修改 content-disposition:一般可更改 表单的数据 name:表单参数值&#xff0c;不能更改 表单提交的值 filename&#xff1a;文件名&#xff0c;可以修改 上传的文件名 content-type&#xff1a;文件mime&#xff0c;…

算法学习(数组和字符串) 之数组简介

集合、列表和数组 1.集合&#xff1a; 集合一般被定义为由一个或多个确定的元素所构成的整体。通俗来讲&#xff0c;集合就是将一组事物组合在一起。你可以将商店里的所有物品当成一个集合。 特点&#xff1a; 集合里的元素没有顺序集合里的元素类型不一定相同 2.列表&…