所以对上述两个条件进行观察可以发现((x | (~x+1))可以涵盖为0和不为0的情况,若x为0,则((x | (~x+1))的最高位一定也为0,否则最高位一定是1 上面两个条件是或的关系,关键是如何对这两个条件进行合并,对((x | (~x+1))算数右移31位后发现若x为0,则结果是0;若x不为0,那么结果为-1 int ...
%rax,8)就是在jump table里索引出对应地址后再跳转到该地址。当输入1为第一个参数时,%rax里存储的...
写在前面:出于 hornor code 要求,这些答案本不应出现在这里,但是考虑到这些 lab 已经成型了,不同于 CMU15-445 这种每年的 lab 都会变的变态课,csapp 的 lab 答案早已被解析透了,我这里权当个人记录,而且这个 lab “奇技淫巧”的感觉多一些,认真思考后见识一下答案并没有坏处...
1. phase_1 在break explode_bomb之后,此时炸弹并没有运行,由于还没有找出第一个phase的密码,所以我们先break phase_1,再输入run 这个意思是要我们输入答案,但是我们现在并不知道啊!随便输一个吧。 Breakpoint 1, 0x0000000000400ee0 in phase_1 () (gdb) 在输入答案后,我们会得到上面这一行代码,这时候在gd...
完成CSAPP实验中的"bomb lab"(上)后,我们来逐步解析各个阶段的挑战。首先,确保使用Debian 9.4非虚拟机环境,GDB调试工具必不可少,Windows用户可能需借助WSL或自行安装GDB。实验核心是通过调试bomb.c文件,解密六个阶段的密码。在Phase_1中,主要任务是找到输入字符串与特定字符串的匹配。通过反汇编...
第1阶段:密码`phase_1`。定位到`main`函数中,了解`read_line`函数。通过`gdb`验证,找到字符串位置。第2阶段:密码`phase_2`。关注函数`read_six_number`,理解其如何利用栈保存结果,解析字符串为6个整数。第3阶段:密码`phase_3`。使用`read_two_number`方法读取整数,分析逻辑,找到正确答案...
操作步骤如下:下载lab资源,包含c文件bomb.c和二进制文件bomb。c文件中虽无实际内容,但包含phases.h的引用,关键在反汇编的bomb文件中找到解决方案。在phase_1,你需要在break explode_bomb后,输入答案(虽然未知)。通过输入并查看反汇编,理解strings_not_equal函数判断条件。检查rax、rsi、rdi寄存器...
经典的缓存实验 cache lab,CMU大学(卡耐基 梅隆大学)经典计算机课程实验之一,实验分为两部分, 这里面只有Part A的答案.
建议以文本文件作为输入,因为后续题目可能需要输入非ASCII字符。如./nuclearlab user pwd < answer.txt 第1关:pupil 1unsigned __int64 pupil()2{3intv0;//edi4unsignedintv2;//[rsp+4h] [rbp-14h] BYREF5unsigned __int64 v3;//[rsp+8h] [rbp-10h]67v0 = (int)now_input;8v3 = __readfsqwor...
如果是以下这个网站的bomb lab的话, 结果可以是两个, 22或者20.具体要考察fun7函数的递归特性, 根据...