CSAPP之BombLab

本文详细介绍了在Ubuntu 18.04环境下,使用CSAPP中的BombLab进行汇编和gdb调试的实践过程,包括phase_1和phase_2的破解方法。通过查看源代码、反编译和使用gdb调试,逐步解析了phase_1的核心函数strings_not_equal的工作原理,揭示了目标字符串"Border relations with Canada have never been better."。
摘要由CSDN通过智能技术生成

1. 背景介绍

  从两年前就在看CSAPP断断续续,感觉收获不少但是最近偶尔翻开发现好多东西又忘了,之前基本没写过博客,上次写论文也是四五年前了,现在就趁着新冠疫情期间重温CSAPP顺便把一些收获沉淀下来,不足之处请网友批评指正。我的系统平台是Ubuntu18.04.1 X86-64,文中所有相关资源均可以在CSAPP网站上下载。

2. 言归正传

  bombLab主要依托第三章Machine-Level Representation of Programs需要有汇编基础、熟悉gdb、了解objdump。该bomb分为6个阶段,我们分两部分介绍,第一部分主要针对如何快速通关,第二部分则侧重于分析与学习将整个过程梳理清楚,不感兴趣的可以只看第一部分。首先我们通过查看bomb.c可以看到整个程序的结构

#include <stdio.h>
#include <stdlib.h>
#include "support.h"
#include "phases.h"

FILE *infile;
int main(int argc, char *argv[])
{
   
    char *input;
    if (argc == 1) {
     
	infile = stdin;
    } 

    /* When run with one argument <file>, the bomb reads from <file> 
     * until EOF, and then switches to standard input. Thus, as you 
     * defuse each phase, you can add its defusing string to <file> and
     * avoid having to retype it. */
    else if (argc == 2) {
   
	if (!(infile = fopen(argv[1], "r"))) {
   
	    printf("%s: Error: Couldn't open %s\n", argv[0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值