西工大网络空间安全学院计算机系统基础实验二(phase_2下——漫漫深夜过后的黎明!!!)

本文主要是介绍西工大网络空间安全学院计算机系统基础实验二(phase_2下——漫漫深夜过后的黎明!!!),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

内存地址内存地址中的数注释指向这块内存的寄存器
0xffffd0e8函数phase_2的栈帧
0xffffd0e40xffffd0f4函数phase_2的栈帧
0xffffd0e00x5655b7b0函数phase_2的栈帧
0xffffd0dc0x565566ca函数read_six_numbers的返回地址,函数phase_2的栈帧
0xffffd0d80x5655af64旧%ebx的值
0xffffd0d4
0xffffd0d0
0xffffd0cc0xffffd108第<read_six_numbers+26>行 push %edx
0xffffd0c80xffffd104第<read_six_numbers+30>行 push %edx
0xffffd0c40xffffd100第<read_six_numbers+34>行 push %edx
0xffffd0c0

0xffffd0fc

第<read_six_numbers+38>行 push %edx
0xffffd0bc0xffffd0f8第<read_six_numbers+42>行 push %edx
0xffffd0b80xffffd0f4第<read_six_numbers+43>行 push %eax
0xffffd0b40x565583c10x565583c1是字符串'%d %d %d %d %d %d'的地址%esp

图1:实际运行与纸上分析——使用"ni"命令执行第<read_six_numbers+50>行汇编代码之后各寄存器与栈帧的情况

是不是有点小激动了呀哈哈哈,耐住性子千万不要着急,一步一步慢慢来哦!

内存地址内存地址中的数注释指向这块内存的寄存器
0xffffd0e8函数phase_2的栈帧
0xffffd0e40xffffd0f4函数phase_2的栈帧
0xffffd0e00x5655b7b0函数read_six_numbers的第一个入口参数,函数phase_2的栈帧
0xffffd0dc0x565566ca函数read_six_numbers的返回地址,函数phase_2的栈帧
0xffffd0d80x5655af64旧%ebx的值
0xffffd0d4
0xffffd0d0
0xffffd0cc0xffffd108第<read_six_numbers+26>行 push %edx
0xffffd0c80xffffd104第<read_six_numbers+30>行 push %edx
0xffffd0c40xffffd100第<read_six_numbers+34>行 push %edx
0xffffd0c0

0xffffd0fc

第<read_six_numbers+38>行 push %edx
0xffffd0bc0xffffd0f8第<read_six_numbers+42>行 push %edx
0xffffd0b80xffffd0f4第<read_six_numbers+43>行 push %eax
0xffffd0b40x565583c10x565583c1是字符串'%d %d %d %d %d %d'的地址
0xffffd0b00x5655b7b00x5655b7b0是你输入的针对'phase_2'的字符串的地址%esp

图2:实际运行与纸上分析——使用"ni"命令执行第<read_six_numbers+51>行汇编代码之后各寄存器与栈帧的情况

内存地址内存地址中的数注释指向这块内存的寄存器
0xffffd0e8函数phase_2的栈帧
0xffffd0e40xffffd0f4函数phase_2的栈帧
0xffffd0e00x5655b7b0函数read_six_numbers的第一个入口参数,函数phase_2的栈帧
0xffffd0dc0x565566ca函数read_six_numbers的返回地址,函数phase_2的栈帧
0xffffd0d80x5655af64旧%ebx的值
0xffffd0d4
0xffffd0d0
0xffffd0cc0xffffd1080x6
0xffffd0c80xffffd1040x5
0xffffd0c40xffffd1000x4
0xffffd0c0

0xffffd0fc

0x3
0xffffd0bc0xffffd0f80x2
0xffffd0b80xffffd0f40x1
0xffffd0b40x565583c10x565583c1是字符串'%d %d %d %d %d %d'的地址
0xffffd0b00x5655b7b00x5655b7b0是你输入的针对'phase_2'的字符串的地址%esp

图3:实际运行与纸上分析——使用"ni"命令执行第<read_six_numbers+55>行汇编代码之后各寄存器与栈帧的情。这时是不是觉得<__isoc99_sscanf@plt>非常神奇!!!在这一步过后,我们的思路便豁然开朗了起来)

内存地址内存地址中的数注释指向这块内存的寄存器
0xffffd0e8函数phase_2的栈帧
0xffffd0e40xffffd0f4函数phase_2的栈帧
0xffffd0e00x5655b7b0函数read_six_numbers的第一个入口参数,函数phase_2的栈帧
0xffffd0dc0x565566ca函数read_six_numbers的返回地址,函数phase_2的栈帧
0xffffd0d80x5655af64旧%ebx的值
0xffffd0d4
0xffffd0d0%esp
0xffffd0cc0xffffd1080x6
0xffffd0c80xffffd1040x5
0xffffd0c40xffffd1000x4
0xffffd0c0

0xffffd0fc

0x3
0xffffd0bc0xffffd0f80x2
0xffffd0b80xffffd0f40x1
0xffffd0b40x565583c10x565583c1是字符串'%d %d %d %d %d %d'的地址
0xffffd0b00x5655b7b00x5655b7b0是你输入的针对'phase_2'的字符串的地址

图4:实际运行与纸上分析——使用"ni"命令执行第<read_six_numbers+60>行汇编代码之后各寄存器与栈帧的情。

内存地址内存地址中的数注释指向这块内存的寄存器
0xffffd0e8函数phase_2的栈帧
0xffffd0e40xffffd0f4函数phase_2的栈帧
0xffffd0e00x5655b7b0函数read_six_numbers的第一个入口参数,函数phase_2的栈帧
0xffffd0dc0x565566ca函数read_six_numbers的返回地址,函数phase_2的栈帧
0xffffd0d80x5655af64旧%ebx的值
0xffffd0d4
0xffffd0d0%esp
0xffffd0cc0xffffd1080x6
0xffffd0c80xffffd1040x5
0xffffd0c40xffffd1000x4
0xffffd0c0

0xffffd0fc

0x3
0xffffd0bc0xffffd0f80x2
0xffffd0b80xffffd0f40x1
0xffffd0b40x565583c10x565583c1是字符串'%d %d %d %d %d %d'的地址
0xffffd0b00x5655b7b00x5655b7b0是你输入的针对'phase_2'的字符串的地址
寄存器名称寄存器中的值
%eax0x6

图5:实际运行与纸上分析——使用"ni"命令执行第<read_six_numbers+63>行汇编代码之后各寄存器与栈帧的情。因为此时我们的%eax寄存器中的值为0x6,大于0x5,所以不会跳转到<read_six_numbers+73>这个没有任何内容的空地址上,进而不会引爆炸弹。)

……………………

(图6:实际运行与纸上分析——使用"ni"命令执行第<phase_2+47>行汇编代码之后各寄存器与栈帧的情。接着,第<phase_2+50>行判断(%esp+4)和0的大小,如果不相等就会跳到第<phase_2+64>行,可是第<phase_2+64>行就是引爆炸弹,所以不能不相等,所以%esp+4应该是0,而我们输入的却是1,所以万万不能继续执行了)

按quit退出,接着再重复一遍,先输入phase_1的正确字符串,接着输入"0 1 2 3 4 5"作为我们假设的phase_2的答案,然后一路按"ni",一直到我们刚刚的那个地方,如 图7:又来到了同样的<phase_2+50>这个地方 所示。

图7:又来到了同样的<phase_2+50>这个地方。接着,第<phase_2+50>行判断(%esp+4)和0的大小,如果不相等就会跳到第<phase_2+64>行。但是我们此时的函数栈帧中(%esp+4)的值就是0,相等,不会跳到<phase_2+64>,所以我们输入的6个数中对了第1个数,是"0"。)

图8:实际运行与纸上分析——使用"ni"命令执行第<phase_2+55>行汇编代码之后各寄存器与栈帧的情况

接着使用同样的方法,我们分别得到了剩下的几个数为:"1 1 2 3 5",也就是说,这其实是一个以0,1开头的斐波那契数列,所以我们针对phase_2的答案字符串即为"0 1 1 2 3 5"。

I turned the moon into something I call a Death Star.
0 1 1 2 3 5

这篇关于西工大网络空间安全学院计算机系统基础实验二(phase_2下——漫漫深夜过后的黎明!!!)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/482614

相关文章

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

客户案例:安全海外中继助力知名家电企业化解海外通邮困境

1、客户背景 广东格兰仕集团有限公司(以下简称“格兰仕”),成立于1978年,是中国家电行业的领军企业之一。作为全球最大的微波炉生产基地,格兰仕拥有多项国际领先的家电制造技术,连续多年位列中国家电出口前列。格兰仕不仅注重业务的全球拓展,更重视业务流程的高效与顺畅,以确保在国际舞台上的竞争力。 2、需求痛点 随着格兰仕全球化战略的深入实施,其海外业务快速增长,电子邮件成为了关键的沟通工具。

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

软件设计师备考——计算机系统

学习内容源自「软件设计师」 上午题 #1 计算机系统_哔哩哔哩_bilibili 目录 1.1.1 计算机系统硬件基本组成 1.1.2 中央处理单元 1.CPU 的功能 1)运算器 2)控制器 RISC && CISC 流水线控制 存储器  Cache 中断 输入输出IO控制方式 程序查询方式 中断驱动方式 直接存储器方式(DMA)  ​编辑 总线 ​编辑

2024网安周今日开幕,亚信安全亮相30城

2024年国家网络安全宣传周今天在广州拉开帷幕。今年网安周继续以“网络安全为人民,网络安全靠人民”为主题。2024年国家网络安全宣传周涵盖了1场开幕式、1场高峰论坛、5个重要活动、15场分论坛/座谈会/闭门会、6个主题日活动和网络安全“六进”活动。亚信安全出席2024年国家网络安全宣传周开幕式和主论坛,并将通过线下宣讲、创意科普、成果展示等多种形式,让广大民众看得懂、记得住安全知识,同时还

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

C 语言基础之数组

文章目录 什么是数组数组变量的声明多维数组 什么是数组 数组,顾名思义,就是一组数。 假如班上有 30 个同学,让你编程统计每个人的分数,求最高分、最低分、平均分等。如果不知道数组,你只能这样写代码: int ZhangSan_score = 95;int LiSi_score = 90;......int LiuDong_score = 100;int Zhou