首页 > 其他分享 >csapp lab1,第六项拆弹工作

csapp lab1,第六项拆弹工作

时间:2023-02-02 18:24:06浏览次数:38  
标签:第六项 csapp 下标 这里 lab1 新值 地址 循环 edx

第六项拆弹集合了1-5所有的内容,所以看起来比较复杂,本文只对此进行分析

 

 地址401106 将数据按顺序入栈。

40117 - 401121 判断输入的第一个数减1是否是无符号<=5的值,因为是无符号,所以输入的每个数必须大于0,不然计算后会得到大于5的值

跳转到401128

 

 eax :0下标的值

 这里r12将要存储的是输入数据 1 - 5 的下标,并将值取出来给ebx。

401138 将r12的所代表下标的值与第一个值做不等于比较,以此类推,这里循环做的是,1 - 5下标的值都不等于0下标的值。

 

这里给r13 + 0x4 后 eax的值就变成下标1了,以此循环。

所以401128 到 401151 这里整体做的事儿是,检查输入的6个值每个数都不能相同。

 

 

紧接着跳转到 401153。

这里用7减去 下标 0 - 5 的值,并且用得到的新值替换下标 0 - 5的值。

也就是说如果你输入 1 2 3 4 5 6,那么从rsp开始的值就会变成 6 5 4 3 2 1,。

这是一个坑要注意。

 

 代码刚进入这里rsi被初始化为0了。但是由下面代码知道,rsi存储的依旧是下标序号,只是换了种计算方式。

 

 

edx是个地址,是rsp + 0x20 ,也就是输入的值后边,通过 x /30x  $rsp 可以查看。

edx每次循环都会增8 是rax给的。 

我们要得到6个新值,这几个新值都是地址,会依次放入edx 所指向的位置。

这段代码做的是按照下标 0 - 5 所储存的值作为循环次数。

假如下标0存储的是6,那么就会循环6次得到一个新值,吧这个值放在 (edx,0,8)的位置。以此类推。

如果下标N的值为1,那么就会将0x6032d0 给(edx,N,8)的位置。

注意 rax 存储的始终是 dx+0x8 地址,

4011c0的这里,rcx存储的是原rdx的值,rdx中是新值。 这里是把新值放在(原值所代表的地址+0x8)的位置。这里的作用是用于最终的比较。

这个通过循环得到的地址 + 0x0的位置是一个整数值,最终比较的就是整数值的大小。

 

 

 

这里循环处理得到的6个地址。

4011d2 由于rdx此时是最终的第六个地址,没有后续值了,所以将其 地址+0x8 的位置放入0.

整体意思就是要求每个地址的值 >= 下一个地址的值。

也就是说最终比较的6个降序值。还要注意用7 减序号值得那个坑。

 

 为了保证跳入之前那个坑之后依旧保证我们需要的降序序列。

所以最终输入的是4 3 2 1 6 5。

 

标签:第六项,csapp,下标,这里,lab1,新值,地址,循环,edx
From: https://www.cnblogs.com/thotf/p/17086958.html

相关文章

  • CSAPP随笔:信息的存储
     1. 可寻址的最小内存单位:字节。 2.虚拟内存:一个极其大的字节数组。 3.地址:用唯一的数字标识内存的每个字节。 4.虚拟地址空间:所有可能地址的集合。 5.c语......
  • CSAPP随笔: 并发及并行
     并发:通用概念,同时具有多个活动的系统,通过进程的快速切换模拟出来的。 并行:用并发使系统运行得更快。多核处理器:将多个CPU集成到一个电路芯片上。    超......
  • CSAPP随笔: Amdahl(阿姆达尔)定律
         主要思想:对系统的某个部分加速时,对系统整体的影响取决于该部分对于整体的重要性及加速效果。  Told:系统执行应用程序的耗时。  alpha:系统某......
  • CSAPP随笔: 操作系统管理硬件
         操作系统看作是应用程序和硬件之间的一层软件,两个基本功能:1.防止失控的应用程序滥用硬件。2.向应用程序提供简单一致的机制来控制不同级别的硬件设备。......
  • CSAPP随笔:高速缓存
       解决的问题:系统消耗大量的时间将信息从一个地方移动到另一个地方。较大的存储设备比较小的存储设备运行得慢。价格上速度快的要远高于速度慢的,同时加快处理......
  • CSAPP随笔: 系统的硬件组成
      1. 总线    一组电子管道,在各个部件传递信息字节,类比血管,传递的信息为定长的字节块,即字。 2.I/O设备   输入:键盘鼠标,输出:显示器,存储:存程序及......
  • CSAPP随笔:hello world到底是怎么运行的?
     通过命令行执行./test拆分:    0.shell是干什么的?:shell输出提示符,等待输入一个命令行并执行,若该字符串的首个单词不是shell命令,就假设为一个可执行文件的名......
  • CS144-Lab1-StreamReassembler
    lab地址:lab1-doc代码实现:lab1-code1.目标TCP一个很重要的特性是可以实现顺序、无差错、不重复和无报文丢失的流传输。在lab0中我们已经实现了一个字节流ByteSt......
  • csapp 第一章 计算机系统漫游
    计算机系统由硬件和系统软件组成,共同工作来运行应用程序。#include<stdio.h>intmain(){printf("helloworld!C");return0;}追踪程序hello.c的生命周期—......
  • CSAPP MallocLab 笔记
    CSAPPMallocLab笔记CS15-213labnotessbrk函数为了实现动态的内存分配,一个核心的函数就是sbrk。memoryalignment8字节对齐的地址特征,其地址数值的16进制表......