二进制炸弹的fp是什么?

news2025/1/15 23:48:07

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

问题描述

  我在解二进制炸弹第四阶段的递归时,对主函数中的片段的理解如下:

8bc4:    e3530002     cmp    r3, #2
8bc8:    1a000005     bne    8be4 <phase_4+0x50>
........
8be4:    eb000275     bl    95c0 <explode_bomb>

输入的第一个数必须是2,否则会爆炸

    8bcc:    e51b3014     ldr    r3, [fp, #-20]    ; 0xffffffec 
    8bd0:    e3530002     cmp    r3, #2
    8bd4:    da000002     ble    8be4 <phase_4+0x50> 第二个数要大于等于2
    8bd8:    e51b3014     ldr    r3, [fp, #-20]    ; 0xffffffec
    8bdc:    e3530007     cmp    r3, #7  第二个数要小于7
    8be0:    da000000     ble    8be8 <phase_4+0x54>
    8be4:    eb000275     bl    95c0 <explode_bomb>
     ```
第二个数必须在[2,7)之间,但是输入了所有组合后却没有能成功的,请问是我的这个思路错了吗?
是我对fp的理解错了吗,我认为fp-8是输入的第一个数,fp-20输入的是第二个数

附上完整的phase_4以及递归函数func4
     ```
00008b10 <func4>:
    8b10:    e92d4810     push    {r4, fp, lr}
    8b14:    e28db008     add    fp, sp, #8
    8b18:    e24dd00c     sub    sp, sp, #12
    8b1c:    e50b0010     str    r0, [fp, #-16]
    8b20:    e50b1014     str    r1, [fp, #-20]    ; 0xffffffec
    8b24:    e51b3010     ldr    r3, [fp, #-16]
    8b28:    e3530000     cmp    r3, #0
    8b2c:    ca000001     bgt    8b38 <func4+0x28>
    8b30:    e3a03000     mov    r3, #0
    8b34:    ea000013     b    8b88 <func4+0x78>        r3小于等于0时
    8b38:    e51b3010     ldr    r3, [fp, #-16]                r3大于0 将r3传入[fp-16]
    8b3c:    e3530001     cmp    r3, #1                        r3与1进行比较
    8b40:    1a000001     bne    8b4c <func4+0x3c>
 
    8b44:    e51b3014     ldr    r3, [fp, #-20]    ; 0xffffffec        等于1将r3传入[fp-20],return
    8b48:    ea00000e     b    8b88 <func4+0x78>        
 
    8b4c:    e51b3010     ldr    r3, [fp, #-16]
    8b50:    e2433001     sub    r3, r3, #1
    8b54:    e1a00003     mov    r0, r3
    8b58:    e51b1014     ldr    r1, [fp, #-20]    ; 0xffffffec
    8b5c:    ebffffeb     bl    8b10 <func4>
    8b60:    e1a02000     mov    r2, r0
    8b64:    e51b3014     ldr    r3, [fp, #-20]    ; 0xffffffec
    8b68:    e0824003     add    r4, r2, r3
    8b6c:    e51b3010     ldr    r3, [fp, #-16]
    8b70:    e2433002     sub    r3, r3, #2
    8b74:    e1a00003     mov    r0, r3
    8b78:    e51b1014     ldr    r1, [fp, #-20]    ; 0xffffffec
    8b7c:    ebffffe3     bl    8b10 <func4>
    8b80:    e1a03000     mov    r3, r0
    8b84:    e0843003     add    r3, r4, r3
    8b88:    e1a00003     mov    r0, r3
    8b8c:    e24bd008     sub    sp, fp, #8
    8b90:    e8bd8810     pop    {r4, fp, pc}
 
00008b94 <phase_4>:
    8b94:    e92d4800     push    {fp, lr}
    8b98:    e28db004     add    fp, sp, #4
    8b9c:    e24dd020     sub    sp, sp, #32
    8ba0:    e50b0020     str    r0, [fp, #-32]    ; 0xffffffe0
    8ba4:    e51b0020     ldr    r0, [fp, #-32]    ; 0xffffffe0
    8ba8:    e59f1074     ldr    r1, [pc, #116]    ; 8c24 <phase_4+0x90> “%d %d”
    8bac:    e24b2018     sub    r2, fp, #24
    8bb0:    e24b3014     sub    r3, fp, #20
    8bb4:    ebfffe92     bl    8604 <_init+0x50>   ; 8604:    e28fc600     add    ip, pc, #0, 12
    8bb8:    e1a03000     mov    r3, r0
    8bbc:    e50b3008     str    r3, [fp, #-8]
    8bc0:    e51b3008     ldr    r3, [fp, #-8]
    8bc4:    e3530002     cmp    r3, #2
    8bc8:    1a000005     bne    8be4 <phase_4+0x50>
    8bcc:    e51b3014     ldr    r3, [fp, #-20]    ; 0xffffffec 
    8bd0:    e3530002     cmp    r3, #2
    8bd4:    da000002     ble    8be4 <phase_4+0x50> 第二个数要大于等于2
    8bd8:    e51b3014     ldr    r3, [fp, #-20]    ; 0xffffffec
    8bdc:    e3530007     cmp    r3, #7 第二个数要小于7
    8be0:    da000000     ble    8be8 <phase_4+0x54>
    8be4:    eb000275     bl    95c0 <explode_bomb>
    8be8:    e3a03005     mov    r3, #5
    8bec:    e50b3010     str    r3, [fp, #-16]
    8bf0:    e51b3014     ldr    r3, [fp, #-20]    ; 0xffffffec 取第二个数
    8bf4:    e51b0010     ldr    r0, [fp, #-16]  ; r0=5
    8bf8:    e1a01003     mov    r1, r3        ;r1=r3
    8bfc:    ebffffc3     bl    8b10 <func4>            
    8c00:    e1a03000     mov    r3, r0        
    8c04:    e50b300c     str    r3, [fp, #-12] 
    8c08:    e51b3018     ldr    r3, [fp, #-24]    ; 0xffffffe8 
    8c0c:    e51b200c     ldr    r2, [fp, #-12]    ;r2 = [fp, #-12]    
    8c10:    e1520003     cmp    r2, r3
    8c14:    0a000000     beq    8c1c <phase_4+0x88>
    8c18:    eb000268     bl    95c0 <explode_bomb>
    8c1c:    e24bd004     sub    sp, fp, #4
    8c20:    e8bd8800     pop    {fp, pc}
    8c24:    000098a0     .word    0x000098a0

在这里插入图片描述

如上问题有来自我自身项目开发,有的收集网站,有的来自读者,如有侵权,立马删除。

解决方案

  如下是上述问题的解决方案,仅供参考:

  在ARM汇编语言中,fp通常指的是"frame pointer"(帧指针),它是一个寄存器,用于指向当前栈帧的开始位置。在有的程序中,fp可能不是必须的,特别是在使用像gcc这样的编译器时,可能会优化掉帧指针的使用。

  从你提供的代码来看,fp被用于访问局部变量。在phase_4函数中,fp被设置为指向比栈顶高4个字节的位置(e28db004),同时栈指针sp被减去32个字节以分配局部变量空间(e24dd020)。这意味着局部变量可以通过相对于fp的偏移量来访问。

  这里是一些关键指令的解释:

  • e51b3014 ldr r3, [fp, #-20]:从fp地址减去20字节的位置加载数据到r3寄存器。这通常用于访问函数的参数或局部变量。
  • e3530002 cmp r3, #2:比较r3寄存器的值和数字2。

  根据你提供的代码,phase_4函数首先检查第一个输入参数(通过r3寄存器,它被加载自[fp, #-20])是否等于2,如果不等则调用explode_bomb函数,触发炸弹爆炸。

  接下来,它检查第二个输入参数(同样通过r3寄存器,再次加载自[fp, #-20]),确保它在2到6的范围内(不包括7)。如果检查失败,同样会触发炸弹爆炸。

  你的思路关于fp的理解基本是正确的。fp-8可能指向第一个输入参数,fp-20指向第二个输入参数。但是,你需要注意的是,ARM架构中函数参数通常通过寄存器传递,而不是通过帧指针的偏移量。这意味着fp-20可能并不是第二个参数的正确偏移,这取决于编译器如何安排寄存器和栈帧。

  为了解决你的问题,你需要正确地识别出哪些寄存器或偏移量用于传递参数,并确保你的输入满足所有条件。如果输入了所有可能的组合后仍然失败,那么可能存在对代码的误解,或者有其他未被注意到的条件。

  如果你需要进一步的帮助,请提供更多的上下文或详细信息,以便更准确地分析和解决问题。

  希望能够帮到有需要的你。

  PS:如若遇到采纳如下方案还是未解决的同学,希望不要抱怨&&急躁,毕竟影响因素众多,我写出来也是希望能够尽最大努力帮助到同类似问题的小伙伴,即把你未解决或者产生新Bug黏贴在评论区,我们大家一起来努力,一起帮你看看,可以不咯。

  若有对当前Bug有与如下提供的方法不一致,有个不情之请,希望你能把你的新思路或新方法分享到评论区,一起学习,目的就是帮助更多所需要的同学,正所谓「赠人玫瑰,手留余香」。

☀️写在最后

  ok,以上就是我这期的Bug修复内容啦,如果还想查找更多解决方案,你可以看看我专门收集Bug及提供解决方案的专栏「Bug调优」,都是实战中碰到的Bug,希望对你有所帮助。到此,咱们下期拜拜。

码字不易,如果这篇文章对你有所帮助,帮忙给bugj菌来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。

同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!

📣关于我

我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云2023年度十佳博主,掘金多年度人气作者Top40,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 20w+;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。


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

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

相关文章

Go日常分享 - error类型是指针类型吗?

背景 这个问题的产生来源于小泉在开发rpc接口时返回error遇到的问题&#xff0c;开发时想在defer里对err进行最终的统一处理赋值&#xff0c;发现外层接收一直都未生效。问题可以简化为成下面的小demo。 func returnError() error {var err errordefer func() {//err errors…

PMBOK® 第六版 管理项目知识

目录 读后感—PMBOK第六版 目录 在前面的文章中&#xff0c;输入环节都可以看见有事业环境因素、组织过程资产&#xff1b;工具与技术都有专家判断。都是说明知识的重要性。 虽然项目具有其独特的、唯一性&#xff0c;但项目相关的经验却能如同家族传承般&#xff0c;被持续地…

【Python】已解决:安装python-Levenshtein包时遇到的subprocess-exited-with-error问题

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例及解决方案五、注意事项 已解决&#xff1a;安装python-Levenshtein包时遇到的subprocess-exited-with-error问题 一、分析问题背景 在安装python-Levenshtein这个Python包时&#xff0c;有时会…

基于Java的火车订票管理系统【附源码】

火车订票管理登录 摘要&#xff1a;随着我国铁路交通的不断发展&#xff0c;简单的窗口售票模式已经不能满足方便人们出行的目的。采用先进的网络技术开发出方便快捷的火车票订票系统是现代客运业务发展的必然需求。本次设计的火车票订票系统通过访问主页&#xff0c;可以实现…

196.每日一题:检测大写字母(力扣)

代码解决 class Solution { public:bool detectCapitalUse(string word) {int capitalCount 0;int n word.size();// 统计大写字母的数量for (char c : word) {if (isupper(c)) {capitalCount;}}// 检查是否满足三种情况之一if (capitalCount n) {// 全部字母都是大写return…

[最全]设计模式实战(一)UML六大原则

UML类图 UML类图是学习设计模式的基础,学习设计模式,主要关注六种关系。即:继承、实现、组合、聚合、依赖和关联。 UML类图基本用法 继承关系用空心三角形+实线来表示。实现接口用空心三角形+虚线来表示。eg:大雁是最能飞的,它实现了飞翔接口。 关联关系用实线箭头来表示…

Python武器库开发-武器库篇之ThinkPHP 5.0.23-RCE 漏洞复现(六十四)

Python武器库开发-武器库篇之ThinkPHP 5.0.23-RCE 漏洞复现&#xff08;六十四&#xff09; 漏洞环境搭建 这里我们使用Kali虚拟机安装docker并搭建vulhub靶场来进行ThinkPHP漏洞环境的安装&#xff0c;我们进入 ThinkPHP漏洞环境&#xff0c;可以 cd ThinkPHP&#xff0c;然…

c#使用自带库对字符串进行AES加密、解密

文章目录 1 代码1.1 定义Aes加密类块1.2 在主函数中调用 2 获取Key和IV2.1 基本方法2.2 自定义Key2.3 技术方面的原理 参考文章&#xff1a; C#软件加密实例&#xff1f; 。 参考官文&#xff1a; Aes 类。 在使用C#的自带的System.Security.Cryptography.Aes模块进行加密和解…

mediasoup 源码分析 (八)分析PlainTransport

mediasoup 源码分析 &#xff08;六&#xff09;分析PlainTransport 一、接收裸RTP流二、mediasoup 中udp建立过程 tips 一、接收裸RTP流 PlainTransport 可以接收裸RTP流&#xff0c;也可以接收AES加密的RTP流。源码中提供了一个通过ffmpeg发送裸RTP流到mediasoup的脚本&…

基于PyTorch设计的全景图合成系统【文末完整工程源码下载】

前言 本项目实现基于PyTorch将多张图片合成为一张全景图。&#xff08;图像存储路径为/images/1&#xff09;。 作者&#xff1a;阿齐Archie&#xff08;联系我微信公众号&#xff1a;阿齐Archie&#xff09; 使用的图片为&#xff1a; 合成后为&#xff1a; 这个全景图项目主…

eNSP启动设备失败,错误代码40,网卡配置正常,虚拟机导致的错误解决过程

安装eNSP后出现以下错误。 按照帮助文档&#xff0c;查看了相关软件&#xff0c;尤其是vitualbox的版本以及网卡问题。网卡设置正常&#xff0c;vitualbox也匹配成功。 附&#xff1a;vitualbox各个版本的下载地址&#xff1a; 关于网卡名称的修改方法&#xff0c;参照博客 …

python实现技术指标(简单移动平均,加权移动平均线,指数移动平均线)

移动平均线是最常见的技术指标&#xff0c;它能够去除时间序列的短期波动&#xff0c;使得数据变得平滑&#xff0c;从而可以方便看出序列的趋势特征。常见的移动平均线有简单移动平均线&#xff0c;加权移动平均线&#xff0c;指数移动平均线。 一. 简单移动平均(SMA) 简单移…

2.超声波测距模块

1.简介 2.超声波的时序图 3.基于51单片机实现的代码 #include "reg52.h" #include "intrins.h" sbit led1P3^7;//小于10&#xff0c;led1亮&#xff0c;led2灭 sbit led2P3^6;//否则&#xff0c;led1灭&#xff0c;led2亮 sbit trigP1^5; sbit echo…

电容的命名规则

给如下参数给采购&#xff0c;就可以获取 还有一些参数需要重视 容值随着环境温度而保持的程度 常规应用时是可以不用看材质&#xff0c;但是如果使用在新能源汽车和极端环境下的电子产品&#xff0c;就需要关注材质&#xff0c;曾有供应商把可用级电容供应车企&#xff0c;导致…

动手学深度学习(Pytorch版)代码实践 -计算机视觉-36图像增广

6 图片增广 import matplotlib.pyplot as plt import numpy as np import torch import torchvision from d2l import torch as d2l from torch import nn from PIL import Image import liliPytorch as lp from torch.utils.data import Dataset, DataLoaderplt.figure(cat)…

8.DELL R730服务器对RAID5进行扩容

如果服务器的空间不足了&#xff0c;如何进行扩容&#xff1f;我基本上按照如何重新配置虚拟磁盘或添加其他硬盘来进行操作。我的机器上已经有三块硬盘了&#xff0c;组了Raid5&#xff0c;现在再添加一块硬盘。 先把要添加的硬盘插入服务器&#xff0c;无论是在IDRAC还是管理…

基于S7-200PLC的全自动洗衣机控制系统设计

wx供重浩&#xff1a;创享日记 那边对话框发送&#xff1a;plc洗衣 获取完整无水印设计说明报告&#xff08;含程序梯形图&#xff09; 1.自动洗衣机PLC控制的控制要求 1.1全自动洗衣机的基本结构、工作流程和工作原理 1.自动洗衣机的基本结构 2.自动洗衣机的工作流程 自动洗…

RepVGG论文阅读笔记

目录 RepVGG: Making VGG-style ConvNets Great Again摘要INTRODUCTION—简介RepVGG BlockModel Re-parameterization -- 模型重参数化融合Conv2d和BN&#xff0c;将三个分支上的卷积算子和BN算子都转化为卷积算子&#xff08;包括卷积核和偏置&#xff09;多分支融合&#xff…

【Python】已解决:pymssql引发的MSSQLDatabaseException错误

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;pymssql引发的MSSQLDatabaseException错误 一、分析问题背景 在Python中使用pymssql库与Microsoft SQL Server数据库交互时&#xff0c;有时会遇到pymssql._mss…

k8s 部署 ruoyi 前后端分离项目

本文视频版 https://www.bilibili.com/video/BV17ugkePEeN 参考 https://blog.csdn.net/qq_50247813/article/details/136934090 https://gitee.com/nasaa/RuoYi-Vue-cloud https://www.itsgeekhead.com/tuts/kubernetes-129-ubuntu-22-04-3/ https://kubernetes.io/docs/se…