CSAPP课程实验 bomb实验 拆炸弹实验 (2)

关卡1-3 phase1-3

正式进入关卡1,phase_1

首先是关卡1的汇编代码为:


可以看到前3句是非常熟悉的栈开辟代码,下面一起来看一下基本的栈调用过程的汇编代码:在gcc下是AT&T格式的,源操作数,目的操作数

Push  %ebp                     保存 ebp原有的值,防止被新调用的函数覆盖修改,在退出函数时通过pop ebp 恢。ebp每次调用新的函数,都要开辟新的栈,ebp将会到新的堆栈中                                              作为寻址的基址,所以每次要先push 将ebp原有的值压入堆栈中保存。

mov  %esp,% ebp        esp永远指向栈顶,是ebp指向当前栈的栈顶,作为基址,在开辟的堆栈局部空间中,进行寻址。来访问参数和局部变量

sub $0x18,%esp          栈向小地址生长,后压入的在小地址中,开辟一块栈局部空间

mov  %ebp,% esp       栈清理

pop  %ebp                       恢复ebp寄存器

ret   0                                 ret指令将取出call指令压入的返回地址,跳转过去继续执行

首先找到炸弹爆炸点,可以看到是当调用strings_not_equal函数,当字符串不相等则就会爆炸,看到调用字符串比较函数之前传入的两个参数,第一个参数是放在0x8(%ebp)处,可以推断出应该是我们输入的字符串,第二个参数是在立即数$0x804a15c。这里判断函数传参数时,谁是第一个参数,看出栈顺序,栈是先入先出,先入的在小地址,先出来。此处在%esp处的就是第一个要出栈传递的第一个参数。分析出来之后,第一个关就是一个热身了,很简单,就是查看0x804a15c中的字符串的内容就是我们的通关密码。

在0x8048f6f处设置一个断点,然后查看到0x804a15c中的内容。


这里看到先设置了一个断点,然后在第一关的时候先随便输入一串字符串,然后进行调试,到预设的断点后,在进行查看。


这里可以看到通关的字符串内容就是We have to stand with our North Korean allies.

然后输入之后就可以简单轻松通过关卡1

  • 23
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值