【CSAPP】Bomb lab

使用到的工具

  • ODA,可以反汇编文件。
    【CSAPP】Bomb lab_第1张图片
  • VS Code 的 x86 and x86_64 Assembly插件,可以高亮汇编代码
    【CSAPP】Bomb lab_第2张图片
  • gdb,linux调试工具,要在Ubuntu系统用
  • ChatAPI,可以帮助解释汇编代码,汇编代码复制粘贴进去就行

文件说明

  • bomb.asm

这是将自学资料压缩包中的bomb文件进行反汇编后得到的文件,反汇编工具是ODA,官网地址在这里。

需要看懂该文件中6个炸弹的汇编代码,本人对6个炸弹的汇编函数给出了详细的注释。

第1个炸弹

函数名

,在bomb文件中可以搜到

答案:

使用gdb命令:

x /s 0x2400 

得到在0x2400地址中的字符串
将字符串输入到程序中,就可以解除炸弹

函数解释

	.text:00400ee0 48 83 ec 08                      sub    $0x8,%rsp; rsp -= 8 
	.text:00400ee4 be 00 24 40 00                   mov    $0x402400,%esi; esi = 0x402400  
	.text:00400ee9 e8 4a 04 00 00                   callq  0x00401338 <strings_not_equal>
	.text:00400eee 85 c0                            test   %eax,%eax  
	.text:00400ef0 74 05                            je     0x00400ef7 
	.text:00400ef2 e8 43 05 00 00                   callq  0x0040143a <explode_bomb>
	.text:00400ef7 48 83 c4 08                      add    $0x8,%rsp; rsp += 8 
	.text:00400efb c3                               retq

代码第一行是调整堆栈指针,为堆栈上的局部变量分配空间。
第二行将存储字符串的内存地址存储在寄存器 esi 中。
第三行将 esi 对应的内存地址传入函数,函数内部将比较 esi 所指的字符串 和答案字符串是否相等,比较结果存储在寄存器 eax 中。
第四行将两数进行 逻辑与运算,并设置符号标志位、零标志位和奇偶标志位
第五行,如果 零标志位 是 1,说明两个字符串相等,跳转到 00400ef7 处继续执行代码;
第六行,如果 零标志位 是 0,说明字符串不相等,执行引爆炸弹的函数
第七行,恢复堆栈的指针。
第八行,结束函数的执行。

其他函数的解释可以看我的代码仓库,下载文件后,用代码编辑器打开,按ctrl+F 搜索phase_1, phase_2这样的关键词,就可以找到了函数了

你可能感兴趣的:(linux)