首页 > 其他分享 >CSAPP Bomb Lab

CSAPP Bomb Lab

时间:2024-03-12 21:57:36浏览次数:34  
标签:CSAPP Bomb 寄存器 Lab gdb 参数 address layout rax

image

from pixiv

参考博客

知识点

gdb

  • jump 函数名 / * 地址名

    jump 能够很灵活地在gdb调试汇编代码时跳转

    当一不小心错过了关键信息时,我们便可以使用jump


  • run(简写为r) 参数1 参数2 ...

    当我们在调试gdb想要携带参数时,通过gdb bomb input.txt是不可以行的

    应该在run后加上参数


  • layout src显示源码

    layout asm显示汇编代码

    layout split源码和汇编代码都显示

    ctrl+x+a 快捷退出layout


  • x/[count][format] [address]

    打印内存值,从所给地址(address)处开始,以指定格式(format)显示 count 个值

    比较强大的用法是x/s address 可以打印出字符串出来

    x/100i address 可以从address开始打印出100条指令出来


  • info register (指定寄存器名,如rax)

    打印寄存器的值

    info register rax 指定打印rax的值

    i r rax 可以这样简写

炸弹2:Phase_2 栈中探险

这个主打的就是一个静下心来分析栈中的内容

比如在excel上打打草稿

解决这个问题的关键我总结为3个:

知识点

在函数a中调用函数b,我们函数a中要将参数放到指定的6个寄存器上。

(有个有趣的点是:调用者保存寄存器都是用来保存参数的寄存器)

当参数超过6个,函数a就要在自己的栈帧上分配空间用来放参数,且参数越在后面,越先入栈

这点是符合直觉的,因为参数越在后面可能越后别用到。P169

如上图,在本帧中具体顺序是:被保存的寄存器 局部变量 参数构造区(也就是放过多参数的地方)P164


在通过栈存放参数时,所有数据都是向8的倍数对齐 P169

但是我们通过栈存放局部变量,大多数情况并不是这样 P170(栈上的局部存储)P196(数组存放到栈中)P190(数据对齐)

在x86-64中,我们的处理器一次能够处理64个位,一次也能够取到64位

我们的内存(注意,栈也在内存中),是以1字节(8位)作为单位编号,所以 64位/8位=8

所以我们经常能够看到如下栈表示(内存表示):

但是我觉得实际分析起来还是如下更好分析:

标签:CSAPP,Bomb,寄存器,Lab,gdb,参数,address,layout,rax
From: https://www.cnblogs.com/cilinmengye/p/18069388

相关文章

  • 基于深度学习的人员指纹身份识别算法matlab仿真
    1.算法运行效果图预览  2.算法运行软件版本matlab2022a  3.算法理论概述      指纹识别技术是一种生物特征识别技术,它通过分析人类手指末端皮肤表面的纹路特征来进行身份认证。深度学习是机器学习的一个分支,特别适用于处理大规模高维数据,并在图像识别、语......
  • 如何在Anolis 8 安装 极狐GitLab Runner
    GitLab是一个全球知名的一体化DevOps平台,很多人都通过私有化部署GitLab来进行源代码托管。极狐GitLab是GitLab在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。基于Anolis龙蜥8和极狐GitLab官方仓库脚本安装/配置极狐GitLabRunner说明我们先......
  • .Net 创建webhooks Demo,可用于Gitlab等Workflow
    框架:.Net6、webapipackage:GitLabApiClient定义body参数DTO,不同event有不同的参数,具体可参考gitlab文档:https://docs.gitlab.com/ee/user/project/integrations/webhook_events.htmlpublicclassGitLabWebhookData{publicstringRef{get;set;}publicstring......
  • Docker部署GitLab-2024
    搭建公司/个人私有化的Gitlab/Github代码版本管理平台文章耗时:5天(终于全流程走通),相关的应用或问题将持续更新。朗读全文Yourbrowserdoesnotsupporttheaudioelement.怎么用条件:个人域名,公网IP的小主机或服务器(或购得的VPS或网络服务器)根据‘实现方法’中的步骤用d......
  • matlab还可以这么升级
    由于之前安装的matlab2023a是u5的版本的,今天提示有升级,上次升级的matlab挂了,这次抱着试试看看的心态升级,居然成功了。记录如下:1.不要用普通用户启动matlab,使用root启动matlab,我的matlab安装在/usr/local目录下,普通用户不具备写入该目录的权限,容易浪费感情2.cd  /usr/l......
  • Gitlab如何将多个项目移动到指定目录/群组?
    将您的个人项目移至群组本教程将向您展示如何将个人项目移动到群组中。为什么群组很重要?在极狐GitLab中,使用群组可以同时管理一个或多个相关项目。群组具有很多的好处。例如,您可以:管理您的项目的权限。查看群组中项目的所有议题和合并请求。查看您命名空间中的所有项目......
  • matlab读取hdf5文件
    使用matlab2021b读取hdf5文件info=h5info('00030043.hdf5');data_df=h5read('00030043.hdf5','/df');data_angle=h5read('00030043.hdf5','/line_level');b=reshape(data_df,500,[])grayImage=mat2gray(b');imsho......
  • m基于深度学习的32QAM调制解调系统相位检测和补偿算法matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:  2.算法涉及理论知识概要        随着通信技术的飞速发展,高阶调制格式如32QAM(32-QuadratureAmplitudeModulation,32进制正交幅度调制)在高速数据传输中得到了广泛应用。然而,由于信道失真、噪声干扰等因素,接收端往往面......
  • labuladong_二维数组遍历
    1.二维数组进行旋转,图像顺时针旋转90度1.1我们可以先将 nxn 矩阵 matrix 按照左上到右下的对角线进行镜像对称:然后再对矩阵的每一行进行反转:发现结果就是 matrix 顺时针旋转90度的结果://将二维矩阵原地顺时针旋转90度 //逆时针旋转90度   ......
  • 写一个给集群中的node大label
    背景:集群中的ds相关的服务,需要指定label的部署packagemainimport( "bytes" "log" "os" "os/exec" "path/filepath" "strings" "time")constlogFilePath="test.log"funcGetTargetIP(co......