csapp lab2

PHASE_1

使用到的命令:

objdump -t bomb | less

我们得到的bomb文件是一个二进制文件,使用 objdump 可以得到反汇编的代码;

-t 表示生成符号表,不必关注 . 开头的内容,可以看到phase_1/phase_2/.../phase_6,显然应该是对应不同的关卡;

| less 表示使用一种方便浏览的分页方式,可以使用对应的快捷键辅助浏览。

objdump -d bomb > bomb.txt

-d将需要执行的内容生成反汇编代码。

chmod 777 bomb

赋予文件的读写及可执行权限,避免出现permission denied。

gdb bomb

用gab打开文件

break explode_bomb

可以在函数名、行号等地方设置断点

run

执行被gdb打开的文件

disas

显示当前函数的反汇编代码

info registers

查看当前寄存器使用情况

print $eax

输出一个寄存器的内容

x/s $eax(或是一个内存地址如0x12314)

x 命令表示访问相应地址下的内容,/s是可选项,表示这个地址的内容是string

stepi x

单步执行,可以跟一个可选参数表示单步执行x次,默认是一次。执行后再使用disas可以看到箭头指示的当前指令有所变化。

对于这关:

查看到phase_1的反汇编代码之后可以判断出检查方式是使用strings_not_equal这个函数接受两个参数,判断输入命令和答案是否一致,其中对答案所在的地址直接使用x/s就可得到答案,使用shift+ctrl+c/v在终端下复制黏贴答案。

时间: 2024-10-09 22:26:16

csapp lab2的相关文章

CSAPP Lab2: Binary Bomb

著名的CSAPP实验:二进制炸弹 就是通过gdb和反汇编猜测程序意图,共有6关和一个隐藏关卡 只有输入正确的字符串才能过关,否则会程序会bomb终止运行 隐藏关卡需要输入特定字符串方会开启 实验材料下载地址:http://csapp.cs.cmu.edu/2e/labs.html 下面通关解法: 反汇编: objdump -d bomb > bomb_assembly_32.S Phase 1: 打开bomb_assembly_32.S,定位到<phase_1>函数,可以看到以下代码:

CSAPP lab2 二进制拆弹 binary bombs phase_5 施工中

phase_5 phase_5要求输入一个包含6个字符的字符串.phase_5函数从中读取这些信息,并判断其正确性,如果不正确,则炸弹爆炸. phase_5主要考察学生对指针(数组)机器级表示的掌握程度. 观察框架源文件bomb.c: 从上可以看出: 1.首先调用了read_line()函数,用于输入炸弹秘钥,输入放置在char* input中. 2.调用phase_5函数,输入参数即为input,可以初步判断,phase_5函数将输入的input字符串作为参数. 因此下一步的主要任务是从asm

CSAPP 六个重要实验 lab2

CSAPP  &&  lab2 哈哈~ 不愧是"美国进口的六级炸弹"!爽歪歪的"升级打怪" 我把实验材料都上传到下面这个link了,0分下载(良心啊~) http://download.csdn.net/detail/u011368821/7892649 再一个实验指导说明供大家下载: http://download.csdn.net/detail/u011368821/7892677 对于Phase_1的分析: 0000000000400ef0 &

ucore Lab2学习:Virtual Memory

我觉得这个lab最主要就是理解好Virtual memory是怎么map到physical memory的.在CSAPP里面了,通过MMU和TLB电路来实现转换.x86中是用的2级page table. 还要理解stack frame(譬如lab1的project 4.1.1):switch_to_u2k和swith_to_k2u.有2种方法.一个是通过改写stackframe的TSS.一个是直接用asm改写gate descriptor. CSAPP讲了:每一个process有一个对应的VM和

[CSAPP]并发与并行

学了这么久的计算机,并发与并行的概念理解的一直不够透彻.考研复习那会儿,以为自己懂了,然而直到看了CSAPP才算是真正明白了这俩个概念. 并发(concurrency) 流X和流Y并发运行是指,流X在流Y开始之后结束之前开始运行,或者流Y在流X开始之后结束之前开始运行. 如图,进程A与进程B并发,进程A与进程C并发,进程B与进程C非并发. 并行(parallel) 并行是并发的真子集. 并发有可能发生在单处理器上,也可能在多处理器上.流A和流B并行,则流A和流B并发地运行在不同的处理器上. 来自

关于CSAPP lab3中压栈问题引发的思考

之前有个问题也没特别注意,今天回来看邮件发现有同学和我讨论关于函数调用压栈的问题. 废话少说,直接上对比测试图: 图一:CSAPP lab3的getbuf反汇编结果截图 图二: 我测试,节选了部分的getbuf实现,然后很简单的去测试getbuf的反汇编结果,反汇编结果如下图 我究竟是怎么测试的: unsigned long long getbuf() { char buf[36]; volatile char* variable_length; int i; unsigned long lon

读完了csapp(中文名:深入理解计算机系统)

上个星期最终把csapp看完了. 我买的是中文版的,由于除了貌似评价不错以外,由于涉及到些自己不了解的底层东西,怕是看英文会云里雾里.如今看来,大概不能算是个长处,可是的确可以加快我的看书速度,否则一星期还真不大可能把这书搞定. 对csapp慕名已久,主要在于据说这本书尽量的做到相对实用,不去讲那些和实际编程没多大关系的计算机原理(毕竟是著名计算机院校里面最偏软件的cmu的作品),重点很得当,像我这样的没有本科科班出生又不想去死读些不知道以后有没实用的东西的人来说,最是适合了.感兴趣的东西就行再

《深入理解计算机系统》关于csapp.h和csapp.c的编译问题

编译步骤如下: 1.我的当前工作目录为/home/sxh2/clinux,目录下有3个文件inet_aton.c csapp.h csapp.c. 2.编译csapp.c文件,命令为gcc -c csapp.c,生成目标文件csapp.o. 3.编译inet_aton.c文件,命令为gcc -c inet_aton.c,生成目标文件inet_aton.o. 4.链接目标文件csapp.o.inet_aton.o(由于csapp.c文件中有关于线程中部分,gcc编译的时候必须带 -lpthread

CSAPP Tiny web server源代码分析及搭建执行

1. Web基础 webclient和server之间的交互使用的是一个基于文本的应用级协议HTTP(超文本传输协议). 一个webclient(即浏览器)打开一个到server的因特网连接,而且请求某些内容.server响应所请求的内容,然后关闭连接.浏览器读取这些内容.并把它显示在屏幕上. 对于webclient和server而言.内容是与一个MIME类型相关的字节序列. 常见的MIME类型: MIME类型 描写叙述 text/html HTML页面 text/plain 无格式文本 ima