BombLab 解题思路
预备资料
预备工作
1. 解压
在tar所在目录下打开终端
tar -xvf ./bomb.tar
得到bomb
2. 反编译
反编译 bomb 文件后输出到 bomb.txt
objdump -D bomb > bomb.txt
3. 常用指令
指令 | 功能 | 效果 |
---|---|---|
gdb | 进入gdb调试器 | |
start | 运行程序到 main 停止 | |
next | 执行下一步 (不进入函数内部 ) | |
si | 执行下一步 | |
layout split | 显示源码和汇编 | |
layout regs | 显示汇编和寄存器 | |
fin | 跳出当前函数 | |
回车键 | 重复上一条指令 | |
q | 退出 y确认退出 n取消退出 |
phase_1
1. 进入调试模式
使用 gdb bomb 进入调试模式
2. 执行命令到main
使用 start 命令使代码执行到 main 函数停止
3. 显示源码和汇编
使用 layout split 命令 显示源码和汇编代码
4. 将程序运行到第一关
使用 next 指令 + 回车键
5. 让程序继续运行
随便输入一些内容,让程序继续运行
6. 单步进入调试
使用 si 指令单步调试
进入phase_1
7. 找bomb前面的比较
运行到这一行发现有一个call 指令 调用的 string_not_equal
比较两个string 是否相等
现在让我们输出一下 string_not_equal 的传入参数 %rdi 和 %rsi
使用 x/s $寄存器名 即可打印寄存器内保存的字符串
其中1234是我们输入的字符那么与1234作比较的便为需要输入的值了
All your base are belong to us.
让我们尝试一下
使用 ./ 文件名 运行文件
可以发现当我们输入别的字符时就 BOMB!!! 了
当我们输入我们找到的字符串提示第一关已经过了