反汇编(必做)

0、前言

  1. 想要执行gcc - g wk9_20191314.c -o 9week -m32命令时显示找不到必要文件

    说明缺少库函数,使用如下命令安装库函数:

    sudo apt-get install libc6-dev-i386
    
  2. 用到的指令

    b main:设置行断点,在main函数处设置断点
    i r:查看当前寄存器的值
    disassemble:反汇编当前的函数机器码
    si:汇编命令,下一步
    display /i $pc:显示当前执行的指令
    x 0xffffffff:显示指定地址的值
    
  3. 输入老师提供的代码,并使用 sudo gcc -g wk9_20191314.c -o 20191314_xhr_disassemble -m32 反汇编该代码,并用gdb 20191314_xhr_disassemble进入调试,使用b main设置main函数为行断点:

1、过程

  1. 设置行断电后,运行程序一步,输入disassemble进行反汇编:

  1. 输入si命令,查看寄存器的值和对应内存中的值:

    此时地址为0x565561f3

    下一步1

    执行了push bep的操作

    下一步2

    执行了mov命令

    下一步3

    执行了call命令

    下一步4

    执行了mov命令

    下一步5

    下一步6

    执行了add命令

    下一步7

    继续add

    下一步8

    返回f()函数的值,执行了call命令

    下一步9

    此时转到了f()函数

    下一步10

    继续在f()函数,在ebp上执行了push

    下一步11

    在f()函数,执行了从ebp到esp是mov命令

    下一步12

    在f()函数,执行了esp上的sub操作

    下一步13

    在f()函数上的call命令

    下一步14

    eax到esp的mov命令

    下一步15

    下一步16

    f()函数上,堆栈eax上的add操作

    下一步17

    f()函数中堆栈ebp上的movl

    下一步18

    f()函数中ebp堆栈的pushl操作

    下一步19

    最后一步,执行到返回值g(x)+i

3、分析

  1. 基本信息

    • 寄存器的功能

      eax:累加器,加乘运算的缺省寄存器
      esp:存放当前线程的栈的栈顶指针
      ebp:存放当前线程的栈的栈底指针
      eip:存放下一CPU指令的内存地址
      
      
posted @ 2021-11-07 21:48  20191314汇仁  阅读(180)  评论(0)    收藏  举报